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
[64766] Re:Re:[질문]DLL 생성시..
unitas [kjlee1] 1216 읽음    2011-07-07 16:32
답변 감사합니다.

class를 만들때 (dll에 헤더 파일이 없기때문에 New - Text로 해서 dll3.h로 저장했습니다.)
기본변수와 함수를 추가하라고 하셨는데 아래처럼 만들면 되는건가요? (변수는 없습니다)
class Cdll
{
    public:       
            void SayHello();
};

dll 파일은
#include <vcl.h>
#pragma hdrstop
#include "dll3.h"
extern "C" __declspec(dllexport) void SayHello()
{
    ShowMessage("Hello World !");
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
//---------------------------------------------------------------------------

호출하는 프로그램에 lib 파일 추가하고 같은 path에 dll파일 넣어도 결과는 마찬가지 입니다.
말씀하신 방법대로 했는지 모르겠습니다.

그런데 말씀하신 방법은 정적 DLL 방식입니까?
DLL을 처음 사용하는거라  여기있는 게시판을 몇일동안 읽어보니 동적 DLL은 LIB 추가없이
아래의 함수로 접근할 수 있다는 글을 읽은것 같은데 맞습니까?
HINSTANCE hDll;
LoadLibrary();
typedef __declspec(dllimport) void (*SayHello)(void);
SayHello Test;
GetProcAddress(hDll,"SayHello");
FreeLibrary(hDll);

업체에서 DLL파일을 준다고 했습니다.  아직 일정은 잡히지 않았고 어떤 Tool로 만드는지도 아직 모름니다.

그전에 Dll 에 대해서 준비를 하려고 시작을 했는데 잘 안되네요.
그리고 lib 파일은 헤더파일(class)없이도 make 하면 만들어 지지 않나요?
없으면 implib로 만들수도 있구요?

그리고 궁금한것은 tdump -ee로 export 함수들을 보면은
hellow 예제는 단 두줄 SayHello 와 __CPPdebugHook 이렇게 나옵니다.
제가 만든것도 위에 두줄 부분이 나오지만 그전에 EXPORT 함수들이 많이 나옵니다.
저는 hellow 예제와 똑같이 했는데요 
dll 파일을 만들때 제가 빠뜨린것은 있는지? 무엇이 잘못되었는지 궁금합니다.

게시판에서 다운받은 파일로 만든 dll 파일로 하면 정상적으로 잘 동작합니다. (class, lib 없어도 정상동작합니다.)
제가 만든 dll에 문제가 있는것 같은데 예제와 똑같이 한다고 했는데 어디에서 잘못되었는지 모르겠습니다.





이용태 님이 쓰신 글 :
: 저같은 경우는 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 생성시 어떤 문제가 있었는지 말씀 부탁드립니다.

+ -

관련 글 리스트
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 1364 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.