2011-08-15 19 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型*変数を渡すとき

問題があります。

私はWindows Server 2008 64ビットマシンで.NET 4.0を使用しています。
アプリケーションは64ビットプラットフォームで実行するように設定されています。

アイデア?

乾杯、 ドロン。

+3

例外メッセージの詳細を入力してください。 – Nathan

+1

...コードを表示してください。 –

答えて

1

この問題は、このシナリオでバグが発生してクラッシュした第三者コードであるアンマネージドコードに埋め込まれているようです。

1

アンマネージコードのどこかで未定義のビヘイビアが呼び出されました。

0

これは完全に野生の推測ですが、charsポインターを固定するべきではありませんか?

pin_ptr<const wchar_t> chars = ... 

別の野生の推測:それは管理対象外の呼び出しの後GC::KeepAlive(chars);を使用して生き続けする必要があるのでしょうか?

+0

別の野生の推測: 'StringToHGlobalUni'の代わりに' PtrToStringChars'を使うことができますか? – stusmith

+0

それを試してみてください。ロックなし。 – DoronBM

関連する問題