Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Eigene DLL

1,124 views
Skip to first unread message

punky

unread,
Aug 29, 2009, 12:38:32 AM8/29/09
to
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 \n");

break;

case DLL_PROCESS_DETACH:
printf("<DLL> Detached\n");
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!\n",GetLastError());

}
myfunct=(myfunctPtr)GetProcAddress(hDLL,"myfunct");
if(!myfunct){
printf("<EF> Cant do myfunction [project1.dll]!\n");
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...

SvenC

unread,
Aug 29, 2009, 3:57:51 AM8/29/09
to
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

punky

unread,
Aug 30, 2009, 12:53:38 AM8/30/09
to
On 29 Aug., 09:57, "SvenC" <Sv...@nospam.nospam> wrote:
> 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

aah vielen dank SvenC, konnte es mit extern "C" abstellen

0 new messages