Ok, bei dem Rückgabewert ist mir eine Fehler unterlaufen. Hab gerade mal nachgeschaut. Die aktuelle Version ist jetzt:
Delphi-Quellcode:
TCbfDataRWProc =
function (
DevHndl : UINT32;
pAddr : PTDevAddr;
BufLen : UINT32;
pBuffer : PUINT8;
Ioxs : EIoXS
): EIoXS; stdcall;
Wegen der Aufrufkonvention:
In der Headerdatei steht
Code:
#ifdef PASCAL
#define CODE_ATTR __stdcall
#else
#define CODE_ATTR
#endif
und Visual Studio ist so freundlich den Bereich von #ifdef..#else..#endif, der aktuell nicht relevant ist, auszugrauen und in der obigen Anweisung ist der Teil mit stdcall nicht ausgegraut(also PASCAL irgendwo definiert). "CODE_ATTR" wir bei allen exportierten Funktionen verwendet, deshalb gehe ich davon aus, dass ich mit stdcall arbeiten muss. Oder ist der Parameter, der dem Compiler in der "Kommandozeile" mitgegeben wird stärker?
Ich vermute dass doch noch irgendwo das Problem in den Datenstrukturen liegt. Ich hatte ja unten schon ein Beispiel genannt, wo das C-Struct 2 Byte größer wie mein Delphi-Record ist. Werden die Übergabe-Strukturen bei der Übergabe and die
DLL-Methode in 32 Bit Wörter zerhackt und auf den Stack gelegt, oder wird jeder Primitive Typ aus eine struct(record) für sich auf vollständige 32 Bit aufgefüllt und dann auf den Stack gelegt?
Denn im einen Fall hätte ich ja dann auf jeden Fall ein Problem mit dm Data-alignment.
Die Welt wäre langweilig, wenn es keine Probleme gäbe...