|
From: Christian W. <Chr...@vo...> - 2002-06-17 09:46:12
|
Hi List,
I try to learn the handling with DLLs and the Project I've wrote doesnt
work...
Has anyone some Ideas what I've made wrong ???
Kind Regards
CHW
Here the code:
#include <windows.h>
#include <TCHAR.h>
#include <stdio.h>
static HINSTANCE hLibrary ;
int main(int argc, char* argv[])
{
bool bT;
LPCSTR test;
typedef bool (*lpTest)(void);
typedef LPCSTR (*lpTest2)(void);
typedef char* (*lpTest3) (char*);
lpTest fnTest;
lpTest2 fnTest2;
lpTest3 fnTest3;
//DLL einbinden
if ((hLibrary = LoadLibrary (TEXT("DLL.DLL"))) == NULL)
{
MessageBox (NULL, TEXT ("Can't load DLL.DLL."), "hjjhkj", 0)
;
return -1 ;
};
fnTest = (lpTest) GetProcAddress(hLibrary, _T("_Test1@0"));
if (fnTest != NULL)
{
printf("juhu\n");
bT = fnTest();
};
FreeLibrary(hLibrary); // Unload DLL from memory
if ((hLibrary = LoadLibrary (TEXT("DLL.DLL"))) == NULL)
{
MessageBox (NULL, TEXT ("Can't load DLL.DLL."), "hjjhkj", 0)
;
return -1 ;
};
fnTest2 = (lpTest2) GetProcAddress(hLibrary, _T("Test2"));
if (fnTest != NULL)
{
printf("juhu2\n");
test = fnTest2();
};
FreeLibrary(hLibrary); // Unload DLL from memory
if ((hLibrary = LoadLibrary (TEXT("DLL.DLL"))) == NULL)
{
MessageBox (NULL, TEXT ("Can't load DLL.DLL."), "hjjhkj", 0)
;
return -1 ;
};
fnTest3 = (lpTest3) GetProcAddress(hLibrary, _T("_Test3@4"));
if (fnTest3 != NULL)
{
char szTest[400];
*szTest = 0;
printf("juhu3");
strcpy (szTest, fnTest3("hallo welt\0"));
printf("%s", szTest);
};
FreeLibrary(hLibrary); // Unload DLL from memory
getchar();
return 0;
}
Here the DLL:
#include <windows.h>
#include <string.h>
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT BOOL CALLBACK TestA();
#define TestA Test1
EXPORT LPCSTR CALLBACK TestB();
#define TestB Test2
EXPORT char* CALLBACK TestC(char*);
#define TestC Test3
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
EXPORT BOOL CALLBACK TestA(void)
{
return TRUE;
};
EXPORT LPCSTR TestB(void)
{
return "Test\0";
};
EXPORT char* CALLBACK TestC(char *lpcStr)
{
MessageBox(NULL, lpcStr, "test", MB_OK);
return lpcStr;
};
|