|
저같은 경우는 DLL을 만들때
일단 클래스(기본 변수 및 함수 포함)를 만들어 놓고... (<--- 요 부분이 숨기고 싶어하는 핵심 부분이겠죠..)
이 클래스의 함수를 외부에서 사용할 수 있도록 한번더 wrapping 작업을 합니다.
extern "C" __declspec(dllexport) 어떤 함수
{
클래스 함수();
}
이렇게 만든 것에 대해 dll를 만들고..(그럼 lib도 자동으로 맹글어집니다.)
프로젝트에 lib 추가하고 dll 집어넣은 후, 헤더 화일(extern "C" __declspec(dllexport) 어떤 함수 목록)을 통해 dll안의 함수들을 접근해서 쓰곤 합니다.
일단 님께서 SayHello()를 위에서 제가 얘기한 방법대로 만들어 보신 후, 테스트를 해보세요..
unitas 님이 쓰신 글 :
: 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 생성시 어떤 문제가 있었는지 말씀 부탁드립니다.
|