2011-08-15 6 views
-1

C++ \ CLI 래퍼를 통해 관리되지 않는 코드를 호출하는 관리 코드가 포함 된 클래스가 있습니다. 콘솔 응용 프로그램에서 클래스를 실행하면 오류가 발생하지 않습니다.
하지만이 WCF 서비스와 응용 프로그램이 충돌을 그것을 포장 할 때 코드가 관리되지 않는 코드를 호출 한 지점에 도달. 관리되지 않는 코드 호출로 인해 WCF 프로세스가 손상된다

String^ text = … // Unicode Encoded text; 
const wchar_t* chars = reinterpret_cast<const wchar_t*> ((Marshal::StringToHGlobalUni(string)).ToPointer()); 
unmanaged_class::Process(chars); 

정보에도 운이 시도 :

pin_ptr<const wchar_t> chars = ... 

애플리케이션 그냥 종료 예외없이 비 관리 코드를 입력으로 CONST의 wchar_t * 변수를 전달할 때

문제이다.

내가 .NET 4.0 윈도우 서버 2008 64 비트 컴퓨터를하고 있어요.
응용 프로그램이 64 비트 플랫폼에서 실행되도록 구성되었습니다.

아이디어가 있으십니까?

건배, 도론.

+3

는 예외 메시지의 세부 사항을 제공하십시오. – Nathan

+1

... 코드를 보여주세요. –

답변

1

이 문제는 버그가 있고이 시나리오에서 충돌 한 타사 코드 인 관리되지 않는 코드에 묻혀있는 것으로 보입니다.

1

당신은 관리되지 않는 코드 어딘가에 정의되지 않은 동작을 호출.

0

이것은 완전히 야생의 추측이지만 chars 포인터를 고정해야합니까?

pin_ptr<const wchar_t> chars = ... 

또 다른 추측 : 그것은 관리되지 않는 호출 후 GC::KeepAlive(chars);를 사용하여 살아 보관해야합니까?

+0

또 다른 야생 추측 :'StringToHGlobalUni' 대신'PtrToStringChars'를 사용할 수 있습니까? – stusmith

+0

시도해보십시오. 자물쇠가 없습니다. – DoronBM

관련 문제