Erstellte DLL functioniert unter VB (Fehler 453)
-
Hallo,
ich muss für ein älteres Prüfprogramm eine dll in C++(VS6) schreiben, welche einige nichtunterstützte Datentypen und Strukturen in andere übersetzt. Da ich bis jetzt noch keine Erfahrungen in C++ habe, habe ich unter anderem das Beispiel http://de.wikipedia.org/wiki/Dynamic_Link_Library ausprobiert. Als Prüfprogrammersatz dient mir VB und die Declare-Anweisung.
Hier der Code für die DLL.#include <windows.h> #if defined(_MSC_VER) #define DLL __declspec(dllexport) #else #define DLL #endif // nur unter MS VC das Symbol DLL definieren unter z.B. Linux wird DLL ignoriert // Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll // (in diesem Beispiel: Addieren zweier Zahlen) DLL double AddNumbers (double a, double b) { return a + b; }Und hier der Code für die VB.
Option Explicit Declare Function AddNumbers Lib "Example.dll" (ByVal a As Double, ByVal b As Double) As Double Sub Main() Dim Result As Double Result = AddNumbers(1, 2) Debug.Print "Das Ergebnis ist: " & Result End SubDie DLL wurde fehlerfrei erstellt.
Nach dem Aufruf in VB kommt die Fehlermeldung "Angegebene DLL-Funktion nicht gefunden (Fehler 453)". Sieht man sich mit der Schnellansicht die Exporttabelle der dll an, so ist der Exportname "?AddNumbers@@YANNN@Z". Was mache ich falsch?MfG PierreOne
-
1. Du musst immer "stdcall" als Aufrufkonvention verwenden (VB6 kann nix anderes)!
double __stdcall AddNumbers(double a, double b)2. Bzgl. dem Namen: das einfachste ist eine DEF-Datei zu verwenden und dort den Namen explizit zu exportieren; dann wird er auch mit dem Namen exportiert den Du verwendet hast.
Diese DEF-Datei dann in den Projekteinstellungen unter "Linker|Module Definition File" eintragen.LIBRARY "NameOf.DLL"
EXPORTS
AddNumbers
-
Vielen Dank,
jetzt funktioniert Alles.

MfG PierreOne