Mehrere Funktionen in einer dll Einbauen
-
Hallo Forum!
Ich habe ein Problem:
Ich möchte gerne eine dll Programmieren, die mehrere Funktionen beinhaltet, um diese aus einen VB Programm aufzurufen.
Ich habe dazu ein klasse Beispiel gefunden, welches mehrere Funktionen beinhaltet.Genau nach diesem Beispiel, habe ich meine dll gestaltet.
Ich habe eine Datei .def Datei, in der Beide Funktionen Exportiert werden.
Allerdings kann ich die zweite Funktion nicht aufrufen.
Egal wie ich die Übergabeparameter ändere.Im VB bekomme ich imemr die Meldung:
--------------------------------------------------
Run-time error '453':Can´t find DLL entry point Funktion2 in test.dll
--------------------------------------------------Gibt es etwas was ich beachten muss, was nicht so leicht im Source ersichtlich ist, wenn ich mehrere Funktionen in eine dll schreiben will?
Bitte postet jede noch so abwegige Anregung die euch einfällt.
Ich bin echt am verzweifeln.
Greetz
joey
-
Hiermit kannst Du schauen, welche Funktionen tatsächlich von Deiner Dll exportiert werden:
http://www.dependencywalker.com/Ansonsten ist es interessant zu wissen, wie Du die Funktionen exportierst. Du mußt dem Prototypen aber auf alle Fälle noch ein __sdtcall mitgeben.
-
Danke dir.
Es werden laut Dependency Walker BEIDE Funktionen Exportiert.
Und auch die prototypen haben ein __sdtcall.Ich finde den Fehler einfach nicht.
So schauts aus:
VARIANT_BOOL _stdcall Funktion1(HWND hWnd); VARIANT_BOOL _stdcall Funktion2(int a); BOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved ) { switch (dwREASON) { case DLL_PROCESS_ATTACH: { break; } case DLL_PROCESS_DETACH: { break; } } return TRUE; } VARIANT_BOOL _stdcall Funktion1(HWND hWnd) { MachneMengeMitDeinemHWND return 0; } VARIANT_BOOL _stdcall Funktion2(int a) { MachneMengeMitDeinemInteger return 0; }
Die .def Datei siehst so aus:
LIBRARY test
;------------------------------------------------------------------------
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLEEXPORTS
Funktion1 @1
Funktion2 @2
;------------------------------------------------------------------------Egal was ich mache...
Er frisst die 2te Funktion nicht und sagt (in VB):Run-time error '453'
Cán´t find dll entry point... blablablaDie erste klappt immer tadellos.
Vielleicht sieht ja wer den Fehler.
Greetz
Joey
-
vielleicht kennt VB den Datentyp 'int' nicht, weil ich nicht glaube, dass VB die DLL über Funktionsnummern einliest
-
Versuch mal
__declspec(dllexport) vor jede Funktion zu schreiben
-
Ich sehe da keine Probleme. Und wenn, wie Du sagst, beide Funktionen korrekt exportiert werden (auch in der Schreibweise), wirst Du das Problem auf der Gegenseite, sprich VB, suchen müssen.
-
Visual Basic kennt kein int, sondern Integer
-
Visual Basic kennt kein int, sondern Integer
Das Gegenstück zu int ist Long, Integer ist nur 16 Bit breit.
-
Ich danke euch für eure Antworten!
Leider komme ich vor Montag nicht dazu das auszuprobieren.
Vielen dank nochmal!
Joey