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
[21009] Re:[질문] dll 에 클래스 넣어서 사용하기
유광희 [] 1336 읽음    2002-08-26 10:15
안녕하세요.

dll 에 클래스 넣어서 쓰는 방법 상당히 쉽습니다.
여러 dll 을 만들면서 VC++ 에서나 빌더에서 클래스를 포함하여
dll 을 만들어 보았는데 문제는 없습니다.
다만 클래스 형태라 델파이나 비베 쪽에서는 약간 쓰기 곤란할지도 모르겠네여.
VC++ 에서 만든 DLL 을 빌더에서 호출할때나
빌더에서 만든 DLL 을 VC++ 에서 호출하거나
빌더에서 빌더로 호출하는것도 마찬가지 입니다.


extern "C" __export __stdcall
void CreateFTPServer(TFTPServer **FTP)
{
    *FTP = new TFTPServer;
}



extern "C" __declspec(dllexport) TSerialComm* CreateSerialComm()
{
    TSerialComm *Comm = new TSerialComm();
    return Comm;
}


위에껀 빌더에서 dll 안에서 만들어 놓은 함수이구
아래쪽은 vc++ 에서 dll 안에 만들어 놓은 함수입니다.

저 함수 하나를 호출하여 생성한 클래스 메모리 포인터를 넘기게 되구요.

위에 TFTPServer 나 TSerialComm 의 경우 아래의 헤더처럼 만드시면 됩니다.

class TCodeShuffle
{

public:

        TCodeShuffle();
        virtual void Free();

        virtual void SetOptHideComment(int value);
        virtual void SetOptShuffle(int value);
        virtual void SetOptVarAddString(int value);
        virtual void SetVarAddString(char *String);

        virtual void SetUnchangeFile(char *FileName);
        virtual void SetChangeFile(char *FileName);

        virtual char *Run(char *SourceFileName, char *ChangeVarFileName, char *UnchangeFileName, int *OutputLength);
};

외부에서 호출해야 할 함수들을 virtual 을 지정하여서 작성하시면 됩니다.
헤더 선언시에만 저렇게 사용을 하며

void TCodeShuffle :: SetOptHideComment(int value)
{
...
}

처럼. 코드 안에서는 virtual 을 선언할 필요는 없이 헤더에서만 virtual 을 선언합니다.

이제 dll 을 위처럼 만들었으면 호출하는 곳에서는 아래처럼 활용합니다.

void main()
{
        // DLL 로드
        HINSTANCE hInst = LoadLibrary ("CodeShuffle.dll");

        typedef TCodeShuffle* (*PFNCreateA1)();

        // 클래스 적재 함수 받음
        PFNCreateA1 pfnCreateA1 = (PFNCreateA1)GetProcAddress(hInst, TEXT("CreateCodeShuffle"));

        // 클래스 생성
        TCodeShuffle* a = (pfnCreateA1)();

        int OutputLength;

        a->SetOptHideComment(true);
        a->SetOptShuffle(true);
        a->SetOptVarAddString(true);
        //a->SetVarAddString("BProject_");
        a->SetChangeFile("D:\\Mobile Top\\서버팀\\Project\\Code Shuffle\\Output\\change.txt");
        a->SetUnchangeFile("D:\\Mobile Top\\서버팀\\Project\\Code Shuffle\\Output\\unchange.txt");

        char *Output = a->Run("D:\\Mobile Top\\서버팀\\Project\\Code Shuffle\\Output\\main.cpp", "", "", &OutputLength);
        char *Output = a->Run("D:\\Mobile Top\\서버팀\\Project\\Code Shuffle\\Output\\main.cpp", "", "", &OutputLength);
        char *Output = a->Run("D:\\Mobile Top\\서버팀\\Project\\Code Shuffle\\Output\\main.cpp", "", "", &OutputLength);

        FILE *fp = fopen("c:\\a.out.h", "w");
        fwrite(Output, OutputLength, 1, fp);
        fclose(fp);

}

그러 도움이 되셨는지~~

제가 개인적으로 계속해서 모아둔 빌더 팁은 http://www.wanny.co.kr 에 계속해서
쌓아놓고 있답니다. (홍보해서뤼 죄송~!)

그럼 이만!





니엘이~~* 님이 쓰신 글 :
: 안녕하세요.
:
: 현재 만들고 있는 라이브러리를 DLL로 만들어서 배포하려고 해요.
:
: 물론 VC++에서나 BCB에서나 모두 사용할 수 있는 라이브러리를 목적으루..
:
: 그래서 제가 다음과 같이 했습니다.
:
: [소스파일]------------------------------------------------
:
: extern "C" {
:   __declspec(dllexport) __stdcall int func1();
:   __declspec(dllexport) __stdcall int func2();
: }
:
: __declspec(dllexport) __stdcall int func1() {
: //..
: }
:
: __declspec(dllexport) __stdcall int func2() {
: //..
: }
:
: [배포용 해더파일]------------------------------------------------
: extern "C" {
:   __declspec(dllimport) __stdcall int func1();
:   __declspec(dllimport) __stdcall int func2();
: }
:
: --------------------------------------------------------------
:
: 위와 같이 소스 파일만들구 *.dll 파일과 *.lib 파일을 만든후..
:
: 헤더파일과 같이 배포하여 사용해본 결과...
:
: 예상대로 잘 되더군요..
:
: 그런데요...
:
: 제가 한 게 맞게 잘 한건가요?? 뭔가 이상하다는 느낌이...
:
: 그리구요...
:
: DLL에 클래스를 넣을 수는 없을까요??
:
: bcbdev에서 본것처럼 클래스 flattening이나 COM을 이용하는 방법 이외에요..
:
: 아시는 분 좀 가르쳐주세요~~!!

+ -

관련 글 리스트
20964 [질문] BCB에서 DLL 만들어서 사용하기 니엘이~~* 867 2002/08/23
21009     Re:[질문] dll 에 클래스 넣어서 사용하기 유광희 1336 2002/08/26
20966     Re:[질문] BCB에서 DLL 만들어서 사용하기 조준회 935 2002/08/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.