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
[64902] 가변인자 함수를 갖는 DLL 관련 문의입니다.
SEM80 [sem80] 1234 읽음    2011-08-02 11:07
안녕하세요^^
처음으로 볼랜드 포럼에 문의를 하게 되었습니다.
항상 볼랜드 포럼의 Q&A정보란을 통해서 많은 일들을 해결하였습니다.
하지만 갑자기 안되는 일이 발생해서요...아무리 볼랜드 포럼을 검색하고
구글링을 해도 찾을 수 없어서 이렇게 도움을 청하고자 합니다.
부디 고수님들의 많은 도움 부탁드립니다.
제가 문의 드리고자 하는 내용은 DLL관련 문의입니다.
다음과 같이 간단하게 가변함수를 갖는  DLL를 만들었습니다. =>Sample도 첨부하였습니다.(2010에서 사용)
/_______________________________________________________________________________________/
extern "C" __declspec(dllexport) unsigned int __stdcall _AddTestV (int Count, ...)
{
   va_list ap;
   int i, sum;

   va_start (ap, Count);

   sum = 0;
   for (i = 0; i < Count; i++)
       sum += va_arg (ap, int);

   va_end (ap);

   return sum;
}
/_______________________________________________________________________________________/
그리고 DLL 안에 있는 가변함수를 다음과 같이 폼에서 불러 왔습니다.
/_______________________________________________________________________________________/
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    unsigned int (*AddTestV)(int Count, ...);

    int iResult = 0;
    HINSTANCE hDll;

    bool Success = False;

    hDll = LoadLibrary("TestDLL.dll");
    if(hDll!=NULL)
    {
        AddTestV =(unsigned int(*)(int,...)) GetProcAddress(hDll,"_AddTestV");
        Success = (AddTestV != NULL);
        if(Success)
        {
            iResult = (*AddTestV)(5,10,20,30,40,57);
        }
    }
    Edit2->Text = iResult;
}
/_______________________________________________________________________________________/

그런데  GetProcAddress로 함수를 읽어오면 null 값이 들어옵니다.
첨부한 sample에 보시면 고정변수는 별문제없이 값이 넘어오지만 이상하게 가변인자를 갖는 함수만은 넘어 오지를 못합니다..
혹시나해서...잘 못한게 아닌가 싶어서...VC++로도 DLL를 만들어보았습니다...그런데 VC++에서도 똑같이 가변인자 함수가 있는 DLL를  만들어 C++Builder를 이용하여서 가변인자 함수를 불러오면 이상없이 값이 제대로 넘어옵니다.
그래서 콜백문제인가 싶어서 __cdecl, __stdcall를 바꾸어 가면서도 실험을 해보았으나 값이 넘어오지 않는 문제가 동일하게 발생하였습니다. 도저히 몇일 동안 검색을 해보고 찾아보고 했으나 제대로 된 답을 찾지 못해서 이렇게 부득이하게 문의 드립니다.
제가 혹시 sample 프로그램을 잘못 만든 것인지...코딩이 잘 못 한 것인지... 실행을 잘 못한 것인지...고수님들의 좋은 답변 부탁드립니다.

+ -

관련 글 리스트
64902 가변인자 함수를 갖는 DLL 관련 문의입니다. SEM80 1234 2011/08/02
64909     Re:가변인자 함수를 갖는 DLL 관련 문의입니다. 장성호 1905 2011/08/02
64916         감사합니다.^^ SEM80 1106 2011/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.