C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[64769] Re:[질문]DLL 생성시..
aa [] 1363 읽음    2011-07-07 22:38
unitas 님이 쓰신 글 :
: DLL 을 처음 사용하게 되었는데 처음부터 쉽지가 않네요.
: 이 게시판에 있는 예제를 가지고 만들어 봤습니다.
:
: Hellow 예제를 가지고 똑같이 만들어 보려고 했는데 잘 되지 않습니다.
: 아무래도 DLL 생성에 문제가 있는것 같은데요.
: DLL Wizard로 해서 BOX가 나타날때 C++,  Use VCL를 선택해서 했습니다.
:
: DLL Source는 아래처럼 게시판에 있는 예제와 똑같이 했습니다.
: #include 
: #pragma hdrstop
: 
: extern "C" __export  void __stdcall 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 생성시 어떤 문제가 있었는지 말씀 부탁드립니다.
 #include 
 #pragma hdrstop
 
 extern "C" __declspec(dllexport)  void __stdcall 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);<< 잘못됨
    typedef void (__stdcall *MYFUNC) (); << 요롷게해도됨 전 이렇게했음;


     //SayHello Test;
 
     MYFUNC Test = (MYFUNC)GetProcAddress(hDll,"SayHello");
     if(Test)
      Test();
     
     FreeLibrary(hDll);
 }


+ -

관련 글 리스트
64761 [질문]DLL 생성시.. unitas 1677 2011/07/07
64798     Re:[질문]DLL 생성시 - 자답 unitas 1935 2011/07/13
64779     Re:[질문]DLL 생성시.. aa 1850 2011/07/08
64780         Re:Re:[질문]DLL 생성시.. unitas 1573 2011/07/09
64769     Re:[질문]DLL 생성시.. aa 1363 2011/07/07
64771         Re:Re:[질문]DLL 생성시.. unitas 1727 2011/07/08
64762     Re:[질문]DLL 생성시.. 이용태 1549 2011/07/07
64766         Re:Re:[질문]DLL 생성시.. unitas 1216 2011/07/07
64767             Re:Re:Re:[질문]DLL 생성시.. 이용태 1419 2011/07/07
64768                 Re:Re:Re:Re:[질문]DLL 생성시.. unitas 1901 2011/07/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.