0

COM に表示され、Visual Studio 6 アプリケーションから呼び出される C# クラス ライブラリがあります。メソッドの 1 つは文字列を返す必要があります。私はこの2つの方法を試しました:

public void GetString(out string sText)
{
    sText = MemberStringVariable;
}

VC6 から上記を呼び出すと、例外がスローされます。

public string GetString()
{
    return MemberStringVariable;
}

上記を呼び出すと (パラメーターとして BSTR* を使用)、NULL ポインターが返されます。

これを行う適切な方法は何ですか?

4

3 に答える 3

0

この質問と回答を参照してください。stringをネイティブコードに戻すことができるかどうかは疑問です。

于 2012-07-13T16:13:38.707 に答える
0

ああ、COM相互運用を行ってからしばらく経ちましたがMarshalAsAttribute、メソッドの戻り値にonを使用する必要があるかもしれないことを思い出しているようです。

[return: MarshalAs(UnmanagedType.Bstr)]
public string GetString() 
{ 
    return MemberStringVariable; 
} 

その他の例については、 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute( v = vs.100 ).aspxを参照してください。

于 2012-07-13T16:14:49.417 に答える
0

あなたの2番目の方法:

public string GetString() { return MemberStringVariable; }

動作するはずです。私はいつもそれをします。C++ で取得する型は、comutil.h で定義されている _bstr_t です。

于 2012-07-13T16:05:55.847 に答える