델파이에서 개발 된 DLL의 기능을 사용할 수 없습니다. 유형 변환에 어려움을 겪고 있습니다. C++에서델파이 DLL을 사용하는 C++
function rData(ID: Cardinal; queue: WideString): WideString; stdcall;
내 코드가 되니라 :
이
내가 DLL을 호출 할 수있는 기능입니다typedef string (*ReturnDataSPL)(DWORD, string);
string result;
HMODULE hLib;
hLib = LoadLibrary("delphi.dll");
pReturnDataSPL = (ReturnDataSPL)GetProcAddress(hLib,"rData");
if (NULL != pReturnDataSPL)
result = pReturnDataSPL(JobID,printerName);
나는 그것이 작동되도록 할 수 아니에요 문제. Delphi WideString 및 Cardinal과 호환되는 유형을 알지 못합니다.
누군가가 도움이 나를
편집 :
procedure rData(ID: Cardinal; queue: WideString; var Result: WideString); stdcall;
코드를 변경 한 후이 모습 :
이 내가 DLL 호출 할 함수입니다
typedef void (__stdcall *ReturnDataSPL)(DWORD, BSTR, BSTR&); HMODULE hLib; BSTR result = NULL; hLib = LoadLibrary("delphi.dll"); pReturnDataSPL = (ReturnDataSPL)GetProcAddress(hLib,"rData"); if (NULL != pReturnDataSPL) { pReturnDataSPL(JobID,(BSTR)"Lexmark X656de (MS) (Copiar 2)",result); }
I는 위의 코드 변경 : 을하지만 기능은 I을 실행할 때 예외가 발생했습니다 : 'C에서 0x772b15ee의 처리되지 않은 예외 allbackSample.exe : 0xC0000005 : 0x00000000 위치를 읽는 액세스 위반. ' 무엇이 될 수 있습니까? 고맙습니다. – msantiago
C++ 코드가 제 코드와 일치하지 않습니다. 세 번째 매개 변수는 참조로 전달되어야합니다. 코드와 광산의 차이점을 비교하십시오. 또한 BSTR을 존재로 만들 수 없습니다. 실제 BSTR을 만들어야합니다! –
SysAllocString은 BSTR을 만듭니다. 또는 BSTR 편리한 래퍼 중 하나를 사용하십시오. –