VC++ DLL 에서 string 값을 return 받고 싶습니다.
DLL 함수에선 string 값이 맞지만
델파이에 return 값은 이상하게 깨진 문자가 ...
너무 기본이 없어 힘듭니다. 좀 도와주십시오..
<< 델파이 >>
function dl_getdig(line : Integer; count : Integer):LPSTR;
cdecl; external 'DIALOGIC.DLL' name 'dl_getdig';
var
dgts : PChar;
temp : String;
begin
dgts := dl_getdig(line, 1);
temp := StrPas(dgts);
ShowMessage (temp); // ===> 이상하게 깨진 값
if temp <> '#' then
end;
<< VC++ >> DLL
extern "C" _declspec(dllexport) LPSTR dl_getdig(int line, int count);
_declspec(dllexport) LPSTR dl_getdig(int line, int count)
{
char* dgts;
// 생략
temp.Format ("digits : %sn", dgts); // 여기에서는 '#' 맞아요
AfxMessageBox (temp);
return dgts;
}
고드름 김정입니다.
함수내에서 선언한 Pointer는 외부로 벗어나면 자동 소멸된다고 보시면 됩니다.
따라서 VC DLL 에서 넘겨주는 포인터가 델파이로 넘어오면 사라집니다(?).
델파이에서 포인터를 선언한 후,
함수의 파라미터에 포인터형을 넘겨주시고,
함수가 리턴된 후 그 값을 사용하시는 방식으로 변경해 보십시오.
그럼.
초보 wrote:
>
> VC++ DLL 에서 string 값을 return 받고 싶습니다.
>
> DLL 함수에선 string 값이 맞지만
>
> 델파이에 return 값은 이상하게 깨진 문자가 ...
>
> 너무 기본이 없어 힘듭니다. 좀 도와주십시오..
>
>
> << 델파이 >>
>
> function dl_getdig(line : Integer; count : Integer):LPSTR;
> cdecl; external 'DIALOGIC.DLL' name 'dl_getdig';
>
>
> var
> dgts : PChar;
> temp : String;
>
> begin
> dgts := dl_getdig(line, 1);
> temp := StrPas(dgts);
>
> ShowMessage (temp); // ===> 이상하게 깨진 값
>
> if temp <> '#' then
>
> end;
>
>
>
> << VC++ >> DLL
>
> extern "C" _declspec(dllexport) LPSTR dl_getdig(int line, int count);
>
>
> _declspec(dllexport) LPSTR dl_getdig(int line, int count)
> {
> char* dgts;
>
> // 생략
>
> temp.Format ("digits : %sn", dgts); // 여기에서는 '#' 맞아요
> AfxMessageBox (temp);
>
>
> return dgts;
>
> }