|
매번 도움만 받고 있어서 염치없지만, 예제를 찾아서 해보니까 뜻대로 안되서
질문드립니다.
구성은 아래와 같습니다.
//dll 소스 unit5.h
#include "DllClient.h"
#ifdef __BUILDING_THE_DLL
#define __EXPORT_TYPE dllexport
#else
#define __EXPORT_TYPE dllimport
#endif
class __declspec(__EXPORT_TYPE) MyClass5
{
public:
int x,y,z;
MyClass5(){ x=5, y=6, z=7; };
void WINAPI def(void);
};
extern "C" __declspec(__EXPORT_TYPE) void WINAPI def(void);
//dll 소스 unit5.cpp
void WINAPI def(void) { ShowMessage("def"); }
//---------------------------------------------
//실행 소스 test.h
#include "unit5.h"
class TForm1 : public TForm
{
public:
MyClass5* obj1;
WINAPI void(*abc)(void);
};
//실행 소스 test.cpp
#include "test.h"
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
HINSTANCE hDll;
if(ListBox1->ItemIndex == 4){ //dll 클래스 호출에서 access violation 에러
hDll = LoadLibrary("Project5.dll");
obj1 = (MyClass5 *) GetProcAddress(hDll, "MyClass5"); //<-----요기서 obj1는 NULL이 나옵니다.
obj1->x = 1; //요기서 Access violation Error 뜨고요
FreeLibrary(hDll);
hDll = NULL;
}
if(ListBox1->ItemIndex == 5){ //여기 dll 함수 호출은 되는데
hDll = LoadLibrary("Project5.dll");
abc = (void (__stdcall *)(void)) GetProcAddress(hDll, "def");
abc();
FreeLibrary(hDll);
hDll = NULL;
}
}
이렇게 되있는데,
원래 이런게 안되는지 뭘 잘못한건지 좀 알려주세요~
|