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
[20018] [질문] BCB로 만든 DLL을 VC/VB에서 부를때 string 처리
왕주영 [heyjeany] 1095 읽음    2002-07-11 15:06
안녕하세요.
저는 지금 VC/VB에서 처리하는 DLL을 BCB로 만들고 있는데요.
초장부터 막히는군요.
다름이 아니라 DLL의 전달 변수를 처리하고 나면 DLL 함수 리턴 부분에서 에러가 나는데, calling convention이 안맞다고 나오거든요.

예를 들면 VC쪽에서 다음과 같이 exe파일을 만들고.
typedef int ( *TEST )( void );
typedef void ( *STRINGTEST )( CString );

    dll = ::LoadLibrary( "D:\\pci4gx100.dll" );

    DWORD error = ::GetLastError();
    TEST    test;
    STRINGTEST stringtest;
    TCHAR t[ 12 ] ;

    test = ( TEST )::GetProcAddress( dll, "test" );
    stringtest = ( STRINGTEST )::GetProcAddress( dll, "stringtest" );

    int j;
    j = test();
   
    t = "MFCCString" ;
    MessageBox( t );

    stringtest( t );
    MessageBox( t );

    ::FreeLibrary( dll );

BCB의 stringtest를 보면

DLLEXPORT void _stdcall stringtest( CString t )
{
        int length, i;
        length = t.GetLength();
        for ( i = 0 ; i < 4 ; i++ )
                tempstr[ i ] = t.GetAt( i );
        tempstr[ i ] = '\0';
        return;
}

이와 같이 처리해주는데
        tempstr[ i ] = '\0';이후에 에러가 뜨고 ( debugger mode ) release mode에서는 프로그램이 그냥 종료해 버립니다.

그럼 고수님들의 많은 조언 부탁드릴께요.



+ -

관련 글 리스트
20018 [질문] BCB로 만든 DLL을 VC/VB에서 부를때 string 처리 왕주영 1095 2002/07/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.