2011-09-22 3 views
0

관리되지 않는 C++ 코드에서 전달 된 wchar_t 매개 변수에 대한 포인터를 갖고 싶기 때문에 안전하지 않은 컨텍스트가 있다고 가정합니다. 예를 들면 다음과 같습니다.C# 안전하지 않은 컨텍스트/포인터 형식의 LPWStr

unsafe public(int* A, ???* B) 
{ 
    _myInt = A; 
    _myString = B; 
} 

int 매개 변수는 모든 것이 좋지만 ??? wchar_t를이 메서드의 C# 문자열 형식으로 마샬링하는 것으로 알고 있는데 매개 변수 B 앞에 [MarshalAs (UnmanagedType.LPWStr)]을 쓸 수 있습니다. 하지만 B에 대한 일종의 포인터가 필요합니다. _myString 필드에 대한이 포인터. C#에서 wchar_t와 같은 것이 있습니까? 아니면 포인터 B를 클래스의 다른 위치에 저장하도록 할 수 있습니까? 당신은 C#을 문자열의 건설 기간 동안 포인터 뒤에 문자열을 복사에 문제가없는 한 감사합니다, 위르겐

+1

IntPtr을 사용해 보셨습니까? 그것은 보통 내가 C++에서 포인터를 건네주기 위해 사용하는 것입니다. 나중에 C++로 다시 전달하는 것을 제외하고는 엉망이되고 싶지 않습니다. –

답변

1

...이처럼 해낼 수 있습니다

public static unsafe int Strlen(char* start) 
{ 
    var eos = start; 

    while (*(eos++) != 0); 
    return (int) ((eos - start) - 1); 
} 

unsafe public(int* A, char* B) 
{ 
    _myInt = A; 

    _myString = new String(B, 0, Strlen(B)); 
} 

여기에 사용되는 생성자 문서화되어 있습니다 MSDN