2011-05-23 1 views
1

アンマネージ関数のVBシグネチャは何ですか? void PopulateBSTR(BSTR outstring)?アンマネージコードからP/Invoke BSTR

関数PopulateBSTRは、SysAllocStringを実行し、その文字列に値を設定します。管理されていないシグネチャには、BSTR *ではなくBSTRという引数があることに注意してください。 C++シグネチャがBSTR *を引数として持つ場合、IntPtrシグネチャを使用してBSTR文字列をマーシャリングできます。

(アンマネージコードは、私が変更することはできません外部のdllがあるが、私は使用する必要があります。)

+3

渡されたBSTR引数(BSTR *ではなく)を介して*文字列を返す*シナリオはありません。このレガシーコードは、飛行機がどのように炎の球に変わることなく着陸したかは完全にはっきりしていませんが、偶然にしか機能しませんでした。あなたはその種の運がなくなった。 –

+0

@ハンスはかなり正しいです。あなたは基本に戻り、実際に何が起こっているのかを理解する必要があります。 –

答えて

0

PInvoke.netを見ると、あなたはそれがBSTRとして扱われるべきであることを示すためにMarshallAs Attributeを使用する必要があるように見えます。

0

属性リストdllimportCharSet = CharSet.Unicodeを指定する必要があります。文字列クラスではなくStringBuilderとしてキャッチします。

関連する問題