vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Aufrufkonvention für C-dll 
Autor: Joachim
Datum: 19.11.02 11:53

Hallo zusammen,
ich hab da ein Problem beim Aufruf einer C-DLL. Die Definition laut Header-Datei sieht dabei so aus :

struct DOK {
char KNR_Nachname[49];
char BLZ_Vorname[49];
char Geburtsdatum[11];
char Verbundart[13];
char DokTypText[13];
signed short Dok_Typ_NR;
signed short Dok_Format;
signed short Dok_Space_KB;
signed short Dok_Seiten_Anz;
char Dokument_Datum[11];
char Konto_Datum[11];
char Name_Erfasser[80];
char ItemID[17];
char Zuordnungsart[13];
char Rechercheart[2];
char Reg_Name[13];
char Hauptreg_Name[13];
char Userid[30];
char FAX_NR[40];
};

typedef struct DOK DOKSTRUCT;
typedef struct DOK *PDOK;

struct ANZLISTE {
unsigned short usFehlercode; // PMS
unsigned short usFehlerKlasse; // PMS
char szFehlerMeldg[255]; // PMS
unsigned short usSatzZahl; // Anzahl ItemIDs
PDOK pDaten;
};
typedef struct ANZLISTE ANZLISTSTRUCT;
typedef struct ANZLISTE *PANZLISTE;

/*----------------------------------------------------------------------------*/
/* Prototyp anz2_main */
/*----------------------------------------------------------------------------*/

__declspec(dllexport) int __cdecl anz2_main(char*, int, PANZLISTE, char*);


Das ganze habe ich in VB wie folgt nachgeahmt (die Def. der Dok struct hjab ich mir einfach mal gespart, weil ja sowieso nur pointer übergegeben werden):

Public Type structAnzListe
iFehlercode As Integer
iFehlerklasse As Integer
sFehlermeldung As String * 255
ptrDaten As Long
End Type

Public tAnzListe As structAnzListe
Public ptrAnzListe As Long

Public Declare Function anz2_main Lib "c:\winnt\pms_komm.dll" (ByVal ptrUser As String, iDienst As Integer, ptrAnzListe As Long, ByVal ptrPassword As String) As Integer

Das ganze möchte ich jetzt mit folgendem Code zum Laufen bringen :

Dim rc As Integer
Dim iDienst As Integer
Dim User As String
Dim Password As String
Dim testAnzliste As structAnzListe

User = "haemel"
Password = "testPW"
iDienst = 6

ptrAnzListe = VarPtr(tAnzListe)

rc = anz2_main(User, iDienst, ptrAnzListe, Password)

Tja, und dann kommt Fehlernummer 49 (Falsche DLL-Aufrufkonvention).

Übergabe ich anstatt "ptrAnzListe = VarPtr(tAnzListe)" nur einen initialisierten long, kommt der Fehler mit der Aufrufkonvention nicht, allerdings krachts dann auch ordentlich, was ich irgendwie noch verstehe. Also warum klappt der Aufruf mit VarPtr nicht, wer kann mir weiterhelfen???

Danke für jedes Posting,

Joachim
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Aufrufkonvention für C-dll76Joachim19.11.02 11:53

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel