0

C++ DLL で記述された C++ イベントに C# メソッドをフックしたい

C++ 側 #include

extern "C"
{
    typedef void (__stdcall *PFN_MYCALLBACK)();
    int __stdcall MyUnmanagedApi(PFN_MYCALLBACK callback);
}

C#側

public delegate void MyCallback();
[DllImport("data_acquisition_sys.dll")]
public static extern void MyUnmanagedApi(MyCallback callback);

static void Main(string[] args) {

    MyUnmanagedApi(
    delegate()
    {
        Console.WriteLine("Called back by unmanaged side");
    }
    );
    }
}

http://blogs.msdn.com/b/davidnotario/archive/2006/01/13/512436.aspxをフォローしました

エラー

未処理の例外: System.EntryPointNotFoundException: DLL 'data_acquisition_sys.dll' に 'MyUnmanagedApi' という名前のエントリ ポイントが見つかりません。C:\Users\Public\Docume の Affected_detection_sys.Program.MyUnmanagedApi(MyCallback コールバック)

4

2 に答える 2

2

すべての利害関係者のために、ここに問題に対する有効な解決策があります。

C++ 側

extern "C"
{
typedef void (*callback_function)();
callback_function gCBF;

__declspec(dllexport) void StartAcquisition(callback_function callback) {

    gCBF = callback;

    cout << "Acquisition started" << endl;
}

void DoWork() {
    gCBF()
}
}

C#側

[DllImport("data_acquisition_sys.dll", EntryPoint = "StartAcquisition")]
    public static extern void StartAcquisition(MyCallback callback);
StartAcquisition(delegate()
{

    Console.WriteLine("Called back by unmanaged side ");
}
);

callback_function は空のメソッド () であることに注意してください。これは、任意のデータを返したり受け取ったりするとランタイム クラッシュが発生するためです。これは他のスレッドで報告されていますが、回答はありません。

于 2013-05-09T11:15:53.630 に答える