Forums Neueste Beiträge
 

Eigene DLL

29/08/2009 - 06:38 von punky | Report spam
hallo bin gerade deibei mich mit der erstellung von eigenen dll's zu
beschàftigen und habe dabei leider einige probleme. und zwar kann ich
nach dem einbinden in meine exe die funktionen der von mir erstellten
dll nicht verwenden.. hier mal der source:

//- DIE DLL
//

#include <vcl.h>
#include <windows.h>
#include <stdio.h>


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID
lpvReserved)
{
BOOL bResult = TRUE;

// Dispatch this main call based on the reason it was called.
switch (fwdreason)
{
case DLL_PROCESS_ATTACH:
printf("<DLL> Attached ");

break;

case DLL_PROCESS_DETACH:
printf("<DLL> Detached");
break;



default:
break;
}

return (bResult);
}

void __declspec(dllexport) __stdcall myfunct(void){
printf("<DI> TEST");
}

/// DIE EXE
#pragma hdrstop
#include <windows.h>
#include <stdio.h>
//

#pragma argsused

typedef void (__stdcall *myfunctPtr)(void);
myfunctPtr myfunct;
int main(int argc, char* argv[])
{
HANDLE hDLL;
hDLL=LoadLibrary("project1.dll");
if(!hDLL){
printf("<EF> Cant Find [myfunction.dll] %08X!",GetLastError());

}
myfunct=(myfunctPtr)GetProcAddress(hDLL,"myfunct");
if(!myfunct){
printf("<EF> Cant do myfunction [project1.dll]!");
return(FALSE);
} else {
myfunct(); }
getc(stdin);
return 0;
}
/// ************ END EXE

nur springt mir das ding immer auf die fehlermeldung... die DLL wird
geladen nur die function steht anscheinend nicht zur verfügung,
irgendwelche ideen?

ja wird mit BC++ Explorer compiliert...
 

Lesen sie die antworten

#1 SvenC
29/08/2009 - 09:57 | Warnen spam
Hi punky,

hallo bin gerade deibei mich mit der erstellung von eigenen dll's zu
beschàftigen und habe dabei leider einige probleme. und zwar kann ich
nach dem einbinden in meine exe die funktionen der von mir erstellten
dll nicht verwenden.. hier mal der source:



Der exportierte Funktionsname wird "mangled", d.h. automatisch
mit ein paar Zusatzzeichen versehen. Öffne die dll mal mit dem
"Dependency Walker" und guck Dir die Namen an. Darüber können
z.B. Funktionen mit überladenen Parametern exportiert werden.
Das kannst Du mit einem extern "C" und einer def-Datei abstellen:

extern "C" void __declspec(dllexport) __stdcall myfunct(void) ...

Die project1.def Datei:

LIBRARY "project1.dll"
EXPORTS
myfunct


ja wird mit BC++ Explorer compiliert...



BC++ Explorer kenn ich nicht. In VC++ kannst Du die def Datei bei
den Linker Input Properties als "Module Definition File" angeben.

SvenC

Ähnliche fragen