dll
-
hi
#include <windows.h> #include <iostream> using namespace std; int main() { typedef char* (CALLBACK* FUNCPTR)(void); HINSTANCE hDLL; FUNCPTR funcptr; hDLL = LoadLibrary("mydll.dll"); if(hDLL != NULL) { funcptr = (FUNCPTR)GetProcAddress(hDLL, "myReturn"); if(funcptr == NULL) { FreeLibrary(hDLL); cout << "Fehler!" << endl << endl; return -1; } else cout << funcptr() << endl << endl; } return 0; }#include <windows.h> char* WINAPI myReturn(void); BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReversed) { return true; } char* WINAPI myReturn(void) { return "hello world"; }die ausgabe ist Fehler!, wieso gibt GetProcAddress NULL zurück? ich versteh das nicht eigentlich sollte es funktionieren
gruß xerxes
-
Ich nehme an, dass deine Funktion nicht als myReturn exportiert wird (Dependency Walker) - mit der Forensuche solltest du die Lösung finden (hab sie gerade auch nicht 100% parat
)
-
Der Funktionsname muss entweder in eine def-Datei eingetragen sein oder bei VC kann der __declspec(dllexport) Modifier benutzt werden. Bei der zweiten Möglichkeit muss man darauf achten, dass der Name, je nach calling convention, dekoriert wird und entspricht nicht dem eigentlichen Namen der exportierten Funktion.
-
hi
ich würde es lieber mit ner .def datei lösen, doch ich weis nicht im weitesten sinne was eine .def datei ist bzw wie ich sie erstelle oder ob sie schon existiert. ich benutze mvs6gruß xerxes
edit:
bzw was genau ich in de .def datei eintragen muss
-