음은, 당신은이 문제에 대한 많은 정보를 제공하지 않았습니다. 예를 들어, 오류 메시지. 델파이는 "DllPChar"를 코딩합니다.
하지만 신경 쓰지 마세요. 내가 먼저 알아 차린 것은 Declare Function 문이 String을 반환한다는 것입니다. VB에서 BSTR 유형의 값이 반환되기를 기대하기 때문에 이는 작동하지 않습니다. 델파이는 BSTR
과 호환되는 WideString
유형이 있습니다.
VB 문자열이 내부적으로 UTF-16, 즉 COM 메모리 관리자가 할당 한 문자 당 2 바이트의 유니 코드 문자열이기 때문에 이것이 중요한 이유입니다. Delphi PAnsiChar 형식은 8 비트 ANSI 문자에 대한 포인터이며 Delphi 문자열은 Delphi의 자체 메모리 관리자가 할당합니다. 호환되지 않습니다. 그러나 ByVal ... As String
매개 변수로 Declare Function
을 사용할 수 있고 VB 문자열과 PAnsiChar 사이에서 VB 핸들 및 자동 변환을 사용하여 호출을 전에 호출 한 다음 호출 후에 PAnsiChar와 VB 문자열 을 호출하는 특별한 경우가 있습니다.
델파이에서 BSTR을 사용할 수없는 경우 가장 좋은 방법은 AStr
매개 변수를 수정하도록 DllPchar()을 다시 작성하는 것입니다. 또는 값을 반환하는 새 매개 변수를 만듭니다.
ByVal
대신 AStr
을 ByRef
으로 수정하여 수정할 수 있습니다. 이렇게하면 VB에서 유니 코드 문자열을 전달할 수 있습니다. 그런 다음 반환 값을 통해 결과를 반환합니다.
어떤 오류가 있습니까? 그것을 전부 보여주십시오. –
또한'PChar'는 Delphi 2009 및 이후 버전에서는'PWideChar'이지만 이전 버전에서는'PAnsiChar'입니다. 이는 DLL이 작성된 델파이 버전에 따라 interop 연산에 영향을줍니다. –
감사합니다. 매우 도움이되었습니다, 감사합니다. 문제가 해결되었습니다. 다시 한번 감사드립니다. – user3669271