Interaktion: Programm <-> DLL-Import <- DLL-Import
-
GetModuleHandle(NULL) holt eigentlich das Handle des Parent.
Ist mir ein wenig zu schwammig.
Hier:
msdn schrieb:
If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).
Simon
-
hmpf ... d.h. es würde den Handle meines C#-Programms zurückgeben ... möcht ich ja nicht. Ich will ja nur über diese Zwischen-DLL eine Verbindung zwischen der unveränderbaren DLL und meinem C#-Programm aufbauen... D.h. die unveränderbare DLL ruft z.B. eine Funktion meines C#-Programmes auf. Dies geht nicht so ohne weiteres, deswegen hatte ich mir die Zwischen-Dll ausgedacht ...
Hättest du ne andere Idee wie es gehen könnte?
-
Ich denke, das geht so nicht.
Der Code mit GetModuleHandle(NULL) ist Müll.
Simon
-
naja gut ... da ich den nicht ändern kann wirds dann wohl nix werden. Muss ich das ganze mit C++ programmieren, da gehts

-
so? bei mir gings nicht mit C++...
simon
-
Ok habs hier mal als Beweis hochgeladen.
Programm-Code:
int _tmain(int argc, _TCHAR* argv[]) { MessageBox(0, L"Loading DLL + calling function", L"main application", 0); HINSTANCE hDLL; // Handle to DLL LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer DWORD dwParam1; UINT uParam2, uReturnVal; hDLL = LoadLibrary(L"SampleDocklet.dll"); if (hDLL != NULL) { lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "OnTest"); if (!lpfnDllFunc1) { // handle the error FreeLibrary(hDLL); return false; } else { // call the function lpfnDllFunc1(); return true; } } Sleep(15000); return 0; } void CheckIfApiWorks() { MessageBox(0, L"it worked", L"main application", 0); }DLL-Code:
void CALLBACK OnTest() { MessageBox(0, "now calling api function", "from dll", 0); TestApiFunction(); } void TestApiFunction() { typedef void(__stdcall *DUMMY_TYPEDEF)(); DUMMY_TYPEDEF TestFct = (DUMMY_TYPEDEF) GetProcAddress(GetModuleHandle(NULL), "CheckIfApiWorks"); if(!TestFct) { MessageBox(0, "function not found!", "from dll", 0); return; } MessageBox(0, "function found!", "from dll", 0); TestFct(); }jeweils OnTest bzw CheckIfApiWorks exportiert

-
Aha, jetzt verstehe ich dein Setup.
Ich verstehe jedoch den Sinn überhaupt nicht.
Zu was soll das gut sein?
Simon
-
Das würde ja bedeuten, dass dein C# Programm die Funktion CheckIfApiWorks exportieren müsste.
geht nicht...Oder Du machst (gemäss deinem Ansatz) eine Zwischen - DLL die genau CheckIfApiWorks exportiert, was aber wiederum nicht funktioniert, weil, das mit Modul Handle nicht mehr stimmt.
Habe ich das korrekt verstanden?
Was möchtest Du eigentlich bezwecken?
Simon
-
Oder Du machst (gemäss deinem Ansatz) eine Zwischen - DLL die genau CheckIfApiWorks exportiert, was aber wiederum nicht funktioniert, weil, das mit Modul Handle nicht mehr stimmt.
korrekt. Ich möchte eine Verbindung zwischen der unveränderbaren DLL und meinem C#-Programm aufbauen. Beide sollen jeweils Funktionen des anderen ausführen können. In der zwischen-DLL ist es ja auch möglich eine C#-Funktion aufzurufen. Ich benötige nur noch die Verbindung zwischen "mittlerer" DLL und der unveränderbaren ...
(war anscheinend doch zu verwirrend mit den Bezeichnungen)
-
also keine weiteren ideen ... schade