가장 좋은 방법은 WideString을 사용하는 것이다.
몇 가지 이유로.
- 그것은 유니 코드와 D2009
- 그것은 ole32.dll을에서 관리되는 메모리, 델파이의 메모리 관리자 또는 CLR GC 중 하나에 너무 종속되기 전에 작동합니다.
- 직접 옥시 젼에서 포인터
처리하지 않아도, 그렇게처럼 쓸 수있다 :
type
Sample = static class
private
[UnmanagedExport]
method StringTest([MarshalAs(UnmanagedType.BStr)]input : String;
[MarshalAs(UnmanagedType.BStr)]out output : String);
end;
implementation
method Sample.StringTest(input : String; out output : String);
begin
output := input + "ä ~ î 暗";
end;
"MarshalAs는"앞뒤로 문자열을 마샬링하는 방법 CLR 알려줍니다. 이 문자열이 없으면 문자열은 Ansi (PAnsiChar)로 전달됩니다. 이는 아마도 이 아니며 일 것입니다.
이 델파이에서 그것을 사용하는 방법은 다음과 같습니다
또한
procedure StringTest(const input : WideString; out output : WideString);
stdcall; external 'OxygeneLib';
var
input, output : WideString;
begin
input := 'A b c';
StringTest(input, output);
Writeln(output);
end.
, 결코 이제까지 명확하게 외부 인터페이스에 대한 정의되지 않은 사용 유형. DLL 가져 오기 또는 내보내기에 PChar를 사용하면 안됩니다. 왜냐하면 D7 또는 D2009 (원래의 개발 시스템이 무엇인지에 따라 다름)를 컴파일 할 때 예외가 발생하기 때문입니다.
이것은 커뮤니티이므로 질문에 한 명을 입력해서는 안됩니다. 당신이하고 싶다면 그의 대답에 대해 코멘트를 써라. 질문을 작성하는 경우 (이 경우 더 낫다), 가능한 한 일반으로 공식화하십시오. – jpfollenius
동의. 로버트 Giesecke 내가 가질 수있는 것 보다이 대답했다. –