Dieser C-Header ist das was die meisten dir sicher am ehesten hätten übersetzen können:
Code:
LONG McardGetAttrib (
IN MCARDHANDLE hMCard,
IN DWORD dwAttrId,
OUT LPBYTE pbAttr,
IN OUT LPDWORD pcbAttrLen
);
Da ist es auch richtig beschrieben das pcbAttrLen einen gültigen Wert haben muss der übergeben wird und die Rückgabe auch über diese Variable erfolgt.
Die Delphi Übersetzung müsste dann meiner Meinung nach so aussehen:
Long McardGetAttrib(hMCard: Cardinal; dwAttrId: DWORD; var pbAttr: Byte; var pcbAttrLen: DWORD); stdcall;
Wobei ich mir bei StdCall nicht sicher bin da es nirgens vermerkt ist. Es könnte ebenso der C-Standard sein der dann cdecl entspricht.
Edit:
einfacher Arbeiten lässt es sich aber mit folgender Übersetzung:
Long McardGetAttrib(hMCard: Cardinal; dwAttrId: DWORD; pbAttr: Pointer; var pcbAttrLen: DWORD); stdcall;
Denn da pbAttr als untypisierter Pointer declariert ist, braucht man nicht erst zu casten wenn man einen Pointer auf eine Struktur etc. hat, abhängig davon was man per dwAttrId anfordert.
Edit:
Zitat:
Die Fehlermeldung für MCardGetAttrib aus der
DLL lautet "Invalid Parameter".
wie kommst du zu dieser Fehlermeldung? Erscheint ein Fehlerfenster? Dann laut Doku gibt es doch gar keinen Rückgabewert der "Invalid Parameter" lautet außer ich hab das in der pdf übersehen.