2012-01-27 6 views
4

char* 포인터를 반환하는 네이티브 DLL에서 함수를 호출하고 있는데 어떻게 반환 된 포인터를 문자열로 변환 할 수 있습니까?char * C#의 문자열에

char* c = function(); 
string s = new string(c); 

을하지만 그것은 단지 c에 대한 올바른 값이 아닙니다 이상한 한자를 반환 나는 시도했다.

+6

c가 유니 코드 (UTF-16) 데이터를 가리키는 지 확인하십시오. –

+0

"안녕"을'char *'로 반환하는 네이티브 DLL에서 함수를 호출하고 있습니다. 어떤 이유로 변환 된 문자열이 "hi"가 아닙니다. – method

+3

당신을 도울 수있는 아무것도 게시하지 않았습니다. "나는 무언가를 가지고있다. (그러나 나는 그것이 무엇인지 말할 수 없다.) 그리고 내가이 일을 할 때, 나는 기대하지 않는 것을 되돌려 놓고있다. 외부 함수 선언, C#에서 사용하는 import 문 및 변수 선언을 포함한 코드 호출을 게시하십시오. 아마도 누군가 도움을 줄 수 있습니다. 그대로, 그것은 정말로 추측입니다. –

답변

9

아마 기본 DLL 실제로 대신 유니 코드 문자열의 ANSI 문자열을 반환합니다./

using System.Runtime.InteropServices; 
... 
string s = Marshal.PtrToStringAnsi((IntPtr)c); 
+0

고마워, 내 문제를 해결. 충분한 정보를주지 못해서 미안합니다. – method

1

예제가 완전히 명확하지는 않지만 사용자 의견은 C#에서 C++ dll을 호출한다고 제안합니다. char * 또는 문자열이 아닌 bstr을 반환해야합니다.

나는이 작업을 수행했을 때 내가 사용이 질문/대답으로 시작 했죠 :

How to return text from Native (C++) code

2

업데이트하여 P와 같은 외부 함수의 선언을 호출 :이 경우, Marshal.PtrToStringAnsi 전화

[DllImport ("MyDll.dll", CharSet = CharSet.Ansi, EntryPoint = "Func")] 
[return : MarshalAs(UnmanagedType.LPStr)] 
string Func (...); 

당신이 포인터를 얻을 후 추가 작업을 할 필요가 없습니다이 방법 .

관련 문제