2

C# で使用できるように、C++ で定義されたライブラリをリンクしようとしています。C# でアクセスしようとしてCString PastUsedいる C++ の変数を保持する があります。

C++ では、変数の値をPastUsed「.odl」ファイルに BSTR PastUsed. DISP_PROPERTY_EX配車マップとして使用しています。

DISP_PROPERTY_EX(Cpctr, "PastUsed", GetPastUsed, SetPastUsed, VT_BSTR).

から String 変数の値を返しますGetPastUsedPastUsedしかし、この値は(.odl で定義されているように)に保存されているとは思いません。PastUsedC# でこの変数 (.odl から) にアクセスしようとすると、com 例外が発生するため、これが発生していると想定しています。

C++で定義された変数を取得するために私がc#で持っているコードは次のとおりです。

private void GetPastUsedDes_Click(Object eventSender, EventArgs eventArgs) 
{
    if (CheckInvalidButtonClick())
    { 
        return;
    } 
    PrintLine("Dumping past Used"); 
    AxPBSPRINTLib.AxPBSprint sPrint = mPBSPrintCtrl; 
    String str = mPBSPrintCtrl.PastUsed;
    String str = Print.PastUsed;
}

(PastUsed上記の c# のもの) は、c++ で保持されている変数を含むはずの同じ文字列Pastusedです (私の最初の投稿で説明したように)。C# で String str のブレークポイントに到達するとすぐに、例外が発生します。

Print.PastUsed = 'Print.PastUsed' threw an exception of type 'System.Runtime.InteropServices.COMException'
4

1 に答える 1

2

私にはCOMコードのように見えます。

COM相互運用機能を使用します(タイプライブラリを参照し、COMインターフェイス用に生成された相互運用機能クラスを使用します)。

見る

于 2012-07-17T19:27:13.630 に答える