DLL einbinden ohne .lib datei
-
stimmt ich hab keine lib datei
ok... ich guck mir mal die links an - Danke
-
Die links funken nicht
=> ok.. sie funken mit opera nicht
-
Der_Knob schrieb:
Die links funken nicht
=> ok.. sie funken mit opera nicht
Musst du dich als IE identifizieren, keine Ahnung warum das so ist, aber man sagte mir das dies sowieso besser sei.
MfG SideWinder
-
An besagter Stelle mußt Du nichts machen. Ich würde es andersrum machen
if(NULL != (hDll = LoadLibrary("DLLTest.dll"))) { if(NULL == (pfnGFP = GetProcAddress(hDll, "GetInput"))) { //Fehler: Konnte Funktion nicht importieren! return -1; } FreeLibrary(hDll); }
Dann kannst Du sicher sein, das pfnGFP ein gültiger Funktionszeiger ist und aufrufbar ist...
-
[haarspalterei]
if(NULL != (hDll = LoadLibrary("DLLTest.dll"))) { if(NULL != (pfnGFP = GetProcAddress(hDll, "GetInput"))) { // in diesen scope kann ich mir aber auch sicher sein ;-) } FreeLibrary(hDll); }
[/haarspalterei]
Hepi schrieb:
An besagter Stelle mußt Du nichts machen. Ich würde es andersrum machen
hätte ich auch so gemacht
-
@Hepi: Wo würde er dann bei deiner Lösung die Funktion aufrufen
miller_m schrieb:
Hepi schrieb:
An besagter Stelle mußt Du nichts machen. Ich würde es andersrum machen
hätte ich auch so gemacht
Ich hätte da jetzt ganz spontan den Funktionsaufruf hingesetzt
-
flenders schrieb:
@Hepi: Wo würde er dann bei deiner Lösung die Funktion aufrufen
Je nach Bedarf in seiner WndProc (sofern er eine GUI-Anwendung mit Fenster erstellt).
Du rufst doch auch nicht sofort alle aus der DLL importierten Funktionen nach erfolgreichem Import auf, oder?
-
Hepi schrieb:
Du rufst doch auch nicht sofort alle aus der DLL importierten Funktionen nach erfolgreichem Import auf, oder?
Hab ich noch nie verwendet
Aber ist nach FreeLibrary der Pointer nicht ungültig
-
Soweit klappt alles... danke schon mal
Aber wenn ich die Funktion aufruf, stürzt das programm ab:
(GetInput) ((LPSTR)TEXT("Message via DLL function\n"));
oder so:
GetInput = pIIFUNC(pfnGI); GetInput((LPSTR) "Test");
Immer wenn ich die Funktion aufruf stürzt es ab
wo ran liegt das?
Hier nochmal der komplette code:
#include <shlobj.h> #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow) { HINSTANCE hDll; typedef char* (*Proc)(LPSTR); Proc GetInput; char *recive; char string[20]; if(NULL != (hDll = LoadLibrary("DLLTest.dll"))) { GetInput = (Proc) GetProcAddress(hDll, TEXT("GetInput")); if (GetInput != NULL) (GetInput) ((LPSTR)TEXT("Message via DLL function\n")); else MessageBox(0, "Funktion nicht gefunden","Fehler", MB_OK); FreeLibrary(hDll); } return 0; }
-
Versuch es mal so:
(*GetInput) ((LPSTR)TEXT("Message via DLL function\n"));
oder so:
GetInput((LPSTR)TEXT("Message via DLL function\n"));
Vielleicht auch interessant für dich: http://www.function-pointer.org/
-
flenders schrieb:
Aber ist nach FreeLibrary der Pointer nicht ungültig
Ja, ist er, er muß natürlich vorher die Funktion aufrufen.
Wie gesagt, je nach Bedarf...
-
geht nicht
immer noch der gleiche fehler!
-
warum auf auf einen pointer casten? hätte es so gemacht
(*GetInput)(TEXT("Message via DLL function"));
Der_Knob schrieb:
typedef char* (*Proc)(LPSTR);
sicher das das stimmt, also sind die parameter genauso wie in der dll?
-
Wieso verwendest du nicht einfach implib?
-
wie implib? kann das in der MSDN nicht finden
-
-
Hmm, das wird ihm wenig nützen, wenn er die DLL mit Delphi erstellt. Er hat noch immer nicht gesagt, für welchen Compiler er das überhaupt braucht. Bei Borland gibt's z.B. ein implib.exe. Ich bilde mir ein, dass es das bei Microsoft früher auch gegeben hat - mir ist noch gar nicht aufgefallen, dass das jetzt anscheinend nicht mehr der Fall ist.
-
Irgendwehr noch eine Idee?
-
Wieso verrätst du nicht endlich mal, für welchen Compiler?
-
VC++... sorry...