자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Visual Studio C++ DLL 사용 시 CString 처리는...
2015.04.20 20:02
C++로 작성 된 DLL 파일을 델파이에서 사용하려는데
DLL에 다른 함수들은 문제가 없는데 CString 인자가 있는
아래 함수 중 InitKernel 가 제대로 되지 않습니다. 델파이에서 어떻게
변환 사용 가능 한지요?
############################################################################
Visual Studio C++로 작성된 코드에서는 정상 작동 됩니다.
CString eni_xml = _T("text.xml");
InitKernel(eni_xml, slaves);
OnlineMode(2);
Stop();
위 InitKernel의 헤더 파일에 아래로 정의되어 있고요
extern "C" TEST_API int InitKernel(IN CString &ENIXML,OUT int &Node);
extern "C" TEST_API int OnlineMode(IN int Mode);
extern "C" TEST_API int Stop();
############################################################################
Delphi 에서는 함수 호출은 모두 정상적으로 되나 문제는 InitKernel 함수에서
C++에서 정의된 CString eni_xml 을 Delphi에서는 어뗗게 저의 하여야 하나요?
eni_xml을 PChar로도 해보고, 여러가지 해 봤는데 잘 안되네요.
eni_xml := 'text.xml'; // PChar 형등 여러가지.
InitKernel( eni_xml, slaves);
OnlineMode(2);
Stop();
위 C++을 아래로 정의하고,
function InitKernel( ENIXML: PChar; Node:Integer):Integer;stdcall;external DLL_NAME name 'InitKernel';
function SetOnlineMode(Mode:Integer):Integer;stdcall;external DLL_NAME name 'OnlineMode';
function Stop();stdcall;external DLL_NAME name 'Stop';
############################################################################
Delphi Visual Studio C++ DLL 사용 시 CString 처리는...
2015.04.20 20:02
C++로 작성 된 DLL 파일을 델파이에서 사용하려는데
DLL에 다른 함수들은 문제가 없는데 CString 인자가 있는
아래 함수 중 InitKernel 가 제대로 되지 않습니다. 델파이에서 어떻게
변환 사용 가능 한지요?
############################################################################
Visual Studio C++로 작성된 코드에서는 정상 작동 됩니다.
CString eni_xml = _T("text.xml");
InitKernel(eni_xml, slaves);
OnlineMode(2);
Stop();
위 InitKernel의 헤더 파일에 아래로 정의되어 있고요
extern "C" TEST_API int InitKernel(IN CString &ENIXML,OUT int &Node);
extern "C" TEST_API int OnlineMode(IN int Mode);
extern "C" TEST_API int Stop();
############################################################################
Delphi 에서는 함수 호출은 모두 정상적으로 되나 문제는 InitKernel 함수에서
C++에서 정의된 CString eni_xml 을 Delphi에서는 어뗗게 저의 하여야 하나요?
eni_xml을 PChar로도 해보고, 여러가지 해 봤는데 잘 안되네요.
eni_xml := 'text.xml'; // PChar 형등 여러가지.
InitKernel( eni_xml, slaves);
OnlineMode(2);
Stop();
위 C++을 아래로 정의하고,
function InitKernel( ENIXML: PChar; Node:Integer):Integer;stdcall;external DLL_NAME name 'InitKernel';
function SetOnlineMode(Mode:Integer):Integer;stdcall;external DLL_NAME name 'OnlineMode';
function Stop();stdcall;external DLL_NAME name 'Stop';
############################################################################
CString은 MFC의 데이터 타입이어서 델파이에서 그대로 사용할 수 없습니다.(반대로 델파이 클래스를 VS에서도 사용할 수 없습니다.)
방법은 중간에 Wrapping DLL을 하나 만들고 표준 문자열 방식인 char *로 변환하면 델파이에서 PChar로 연동할 수 있습니다.