|
DLL 을 처음 사용하게 되었는데 처음부터 쉽지가 않네요.
이 게시판에 있는 예제를 가지고 만들어 봤습니다.
Hellow 예제를 가지고 똑같이 만들어 보려고 했는데 잘 되지 않습니다.
아무래도 DLL 생성에 문제가 있는것 같은데요.
DLL Wizard로 해서 BOX가 나타날때 C++, Use VCL를 선택해서 했습니다.
DLL Source는 아래처럼 게시판에 있는 예제와 똑같이 했습니다.
#include <vcl.h>
#pragma hdrstop
extern "C" __export __stdcall void SayHello()
{
ShowMessage("Hello World !");
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
Make를 하면 dll 파일크기가 574 kb 나옵니다. 다운받은 예제로 make 하면 크기가 468 kb 나옵니다.
dll를 호출하는 프로그램 소스는 아래와 같이 했습니다.
그러면 첨부한 그림 Error 메세지가 나타납니다.
다운받은 예제로 만든 dll를 호출하면 정상적으로 처리가 됩니다.
hDll = LoadLibrary("C:\\TEMP\\DLL\\TestDll\\DynamicHelloDll.dll"); => 로 하면 정상 처리 됩니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = "";
HINSTANCE hDll;
hDll = LoadLibrary("C:\\TEMP\\DLL\\TestDll\\dll3.dll"); => 이부분에서 Error 나타납니다.
if(hDll==NULL)
{
ShowMessage("Can't load dll");
return;
}
typedef __declspec(dllimport) void (*SayHello)(void);
SayHello Test;
Test = (SayHello)GetProcAddress(hDll,"SayHello");
if(Test)
{
(*Test)();
}
FreeLibrary(hDll);
}
//---------------------------------------------------------------------------
tdump -ee 로 내용을 봤습니다.
첨부한 그림중 Hellow는 다운받아서 만든 dll 입니다. 결과는 두줄 나옵니다.
제가만든 dll은 dlltest_1, dlltest_2 처럼 내용 많이 나옵니다. (양이 많아서 두개의 파일로 첨부했습니다.)
옵션에서 Linker에서 Use dynamic RTC와 Packages Runtime부분 UnCheck 하고
Directories/Conditionals에서도 Include / Library path도 필요없는것 다 삭제 했습니다.
다운받은 예제는 C++ Builder 6.0 이전 버전에서 만든것 같습니다.
저는 C++ Builder 6.0을 사용합니다.
DLL 생성시 어떤 문제가 있었는지 말씀 부탁드립니다.
|