wulfskin hat folgendes geschrieben: |
... aber soweit ich weiss, ist es wichtig das man bei der Funktiondeklaration ein stdcall anhängt. |
Tactive hat folgendes geschrieben: |
Wenn ich das mit dem 'stdcall' einbaue dann schmiert mir das Programm sogar mit einer Fehlermeldung ab. |
Ich empfehle zu dem Thema das
DLL-Tutorial von Assarbad:
Zitat: |
Das enthaltene Beispielprogramm zeigt einmal kurz, wie es sich auswirken kann, wenn man die Aufrufkonventionen nicht beachtet. Einfach mal etwas rumspielen, aber bitte beachten, daß unter Windows 9x durchaus ein Systemabsturz anstehen könnte ... |
Wenn ich mir die typische Arbeit des Assistenten vom VS6 ansehe, dann wird dort wie folgt deklariert:
Quelltext
1:
| #define SAMLOAD_API __declspec(dllexport) |
Die Namensähnlichkeit verleitet mich zu der Annahme, dass als Aufrufkonvention hier nicht
stdcall sondern vielleicht eher
cdecl verwendet werden müsste. Aber ich kann mich auch irren. Nur, meine Annahme würde auch dem Zitat aus Assarbads Tutorial entsprechen: wenn ich die Aufrufkonvention nicht beachte, kann das Programm oder sogar das System abstürzen.
So, jetzt aber -
Brauchst du unbedingt eine Klasse für die Funktion? Ausgehend von einem ähnlichen Beispiel aus dem PSDK und der Borland-Übersetzung nach Delphi hätte ich folgendes vorgeschlagen:
Quelltext
1: 2:
| function CreateNewArchieve(out NewArchieveId: cardinal): boolean; external 'samload' name 'SAM_CreateNewArchieve__1'; |
Ich hätt´s gern ausprobiert und dir lieber ein erfolgreiches Posting geschrieben, aber - ich habe heute spaßeshalber meine allererste DLL mit dem Visual Studio 6 erstellt. Nur, als ich sie in Delphi verwenden wollte, erschien die unschöne Meldung:
Zitat: |
Die Datei XY ist verknüpft mit dem fehlenden Export ABC |
Obwohl ich eine Standard-DLL benutzt habe, die der Assistent vom VS6 bereits mit einer Beispielfunktion versehen hatte.
