Liebe Experten,
ich möchte im Delphi eine in Standard-C defnierte DLL nutzen. So etwas habe ich schon gemacht, aber bei der Syntax der folgenden Header-Datei in C komme ich mit meinem Basiswissen in C nicht weiter:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| TYPE fmiStatus = (fmiOK,fmiWarning,fmiDiscard,fmiError,fmiFatal);
fmiCallbackLogger = PROCEDURE(VAR c: fmiComponent; VAR instanceName: fmiString; VAR status: fmistatus; VAR category: fmiString; VAR messagex: fmiString) OF OBJECT; cdecl; fmiCallbackAllocateMemory = PROCEDURE(VAR nobj: size_t; Size: size_t) OF OBJECT; cdecl; fmiCallbackFreeMemory = PROCEDURE(obj: Pointer) OF OBJECT; cdecl;
fmiCallbackFunctions = RECORD logger: fmiCallbackLogger; allocateMemory: fmiCallbackAllocateMemory; freeMemory: fmiCallbackFreeMemory; END; |
Der Compiler ist zufrieden.
Unsicher bin ich bei der Parameterübergabe (wann Pointer auf den Stack, wann der ganze Inhalt; s.u. in dieser Rubrik). Besonders ist mir mit das Doppelstern-Konstrukt "typedef void* ( *fmiCallbackAllocateMemory)" unklar, ich würde ^PROCEDURE schreiben, was aber natürlich Unsinn ist.
Debuggen ist schwierig, mit Assembler komme ich leidlich zurecht. Aber der Instanziierung-Aufruf ist der komplexeste von alle Funktionsaufrufen, und wenn der nicht geht, dann nützt der Debugger leider bei den einfachen anderen Funktionen nichts.
Umso mehr hoffe ich auf Hinweise.
Grüße
GuaAck