문제

다음과 같은 C 함수에서 DLL:

char * GetDir(char* path );

당신은 어떻게 P/호출이 기능으로 C#과 원수 char*니다..NET 는 방법을 알고 있는 것 같다 할 LPCTSTR 하지만 때를 알아낼 수 없습니다 어떤 마샬링을 일으키는 원인이 되지 않는 코드 액세스 보안을 통해 보호하는 화재를 호출할 경우 이 함수입니다.

도움이 되었습니까?

해결책

OregonGhost 의 대답은 경우 올바른 char*에서 반환된 GetDir 중에 할당된 HGlobal 또는 LocalAlloc.내가 기억하지 못하는 것 하나 하지만 CLR 는 어떤 문자열 형식을 반환에서 물론 이와 관련된 기능에 할당되었으로 한다.

더 강력한 방법은 유형의 반환 GetDir 수 IntPtr.다음 중 하나를 사용할 수 있습니다 Marshal.PtrToStringAnsi 함수에서 얻기 위해 문자열 형식입니다.그것은 또한 당신에게 일의 유연성을 자유롭게 문자열하는 방식이 있습니다.


[DllImport("your.dll", CharSet = CharSet.Ansi)]
IntPtr GetDir(StringBuilder path);

우리는 당신이 어떤 다른 힌트로의 동작 GetDir?그것은 입력할 문자열?어떻게는 값을 반환 할당?을 제공할 수 있는 경우에는 내가 줄 수 있는 더 나은 대답합니다.

다른 팁

노력하다

[DllImport("your.dll", CharSet = CharSet.Ansi)]
string GetDir(StringBuilder path);

문자열은 자동으로 0이 종료 된 문자열로 마샬링되며, charset 속성을 사용하면 Marshaller에게 유니 코드 대신 ANSI를 사용해야한다고 말합니다. 참고 : const char*에 문자열 (또는 System.String)을 사용하지만 숯*에는 stringBuilder를 사용하십시오.

당신은 또한 Marshalas를 사용해 볼 수도 있습니다 이 예.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top