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
[64768] Re:Re:Re:Re:[질문]DLL 생성시..
unitas [kjlee1] 1900 읽음    2011-07-07 18:12
클래스 생성 함수라면 어떤것을 말씀하시는건지요?
아래함수로 dll 파일 만들고
extern "C" __declspec(dllexport) void SayHello()
{
    ShowMessage("Hello World !");
}

hellow 호출함수는 다른 프로그램에서 SayHello()를 호출해야 하는것이 아닌가요?
LoadLibrary에서 여기에서 만든 dll Load하고
이런식으로 호출하는것이 아닌가요?
typedef __declspec(dllimport) void (*SayHello)(void);
SayHello Test;
Test = (SayHello)GetProcAddress(hDll,"SayHello");
if(Test)
    {
        (*Test)();
    }





이용태 님이 쓰신 글 :
: 일단 SayHello()에 대한 구현은 하신거죠?
:
: 그리고 클래스를 정의한 후, 함수를 호출할려면 객체를 하나 맹글어주셔야 합니다.
:
: 전역변수로 클래스 객체 하나 만들고요...
:
: Cdll aa;
:
: extern "C" __declspec(dllexport) void 클래스 생성함수
: {
:        aa = new Cdll;
: }
:
: extern "C" __declspec(dllexport) void hello호출함수
: {
:        aa->SayHello();
: }
:
: 일케 해보시죠...
:
:
:
: 그리고 전 DLL을 동적으로 불러오는게 아닌 걍 플램 실행시 다 올라오도록 했습니다.(lib 추가에 따른 DLL 자동 로딩-정적방법이군요.)
:
: 만약 만들어진 DLL을 implib를 이용해서 lib 맹글면 정적으로 사용할 수도 있을거 같네요.
:
:
:
: unitas 님이 쓰신 글 :
: : 답변 감사합니다.
: :
: : 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()를 위에서 제가 얘기한 방법대로 만들어 보신 후, 테스트를 해보세요..
: : :
: : :

+ -

관련 글 리스트
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 1900 2011/07/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.