2016-07-27 5 views
3

ネイティブコードをラップするC++/cliクラスライブラリがあります。すべてがうまくいきます。テストと使用例のためにC#コードを書いています。 C++のメソッドの1つはファイルの処理です(時間がかかることがあります)ので、コールバック関数を使用してC#呼び出し側に進行状況を報告したいと考えています。C++/cliでデリゲートを宣言してC#で使用する方法

public delegate int ProcListCB(int state, int status, long count); 

と、次のようにライブラリを使用してコードからデリゲートを設定するための機能::次のように私はC++ライブラリでのデリゲートを宣言しているのC#で

public ref class MyClass 
{ 
    public: 
    void SetProcListCallback(ProcListCB^cb) 
    { 
     HouseKeeping::procListCallback = cb; 
    } 
}; 

、私は次があります。

ProcListCB procListCB; 

    public int ProcessListCallback(int state,int status,long count) 
    { 
     int rtnVal = 0; 
     // some code... 
     return (rtnVal); 
    } 

    private void Process_Click(object sender, EventArgs e) 
    { 
     VerifySq vsq = new VerifySq(); 
     ProcListCB cb = new ProcListCB(ProcessListCallback); 
     vsq.SetProcListCallback(cb); 
     ... 
    } 

私はコンパイルエラーを取得しています:

エラーCS0123:「VerifySqListGuなしの過負荷を私は、しばらく検索しましたが、私は答えを見つけませんでした。(明白に)。私は、規約違反を呼び出す関数がいくつかあると想定していますが、詳細はわかりません。どんな助けも高く評価されます...

+0

A C++ 'long'のISN」かなり長い間、あなたはおそらく「長い間」を探しています。それはもっと長いです:) –

答えて

2
public delegate int ProcListCB(int state, int status, long count); 

これをC++/CLIで実行している場合、問題はC++のデータ型です。 C++の大きさはどれですか?int? 32ビット。どのくらいの大きさのC++ longですか?また32ビット。

C#との相互運用性があるので、明示的にC#データ型を使用します。 (そして、そう、あなたはusing namespace System;を持っている場合でも、私はまだあなたは、.NETタイプを参照していること、それは驚くほど明白にするために、このライン上System::を使用すると思います。)

public delegate System::Int32 ProcListCB(
    System::Int32 state, System::Int32 status, System::Int64 count); 
+0

ありがとう!それがそれを解決しました。 –

関連する問題