簡體   English   中英

如何在C ++ / cli中聲明委托並在C#中使用它

[英]How to declare a delegate in C++/cli and use it in C#

我有一個包裝一些本機代碼的C ++ / cli類庫。 一切都很好,我正在為測試和使用示例編寫C#代碼。 其中一個C ++方法對文件進行處理(可能需要一些時間),因此我想使用回調函數向C#調用者報告進度。 我在C ++庫中聲明了一個委托,如下所示:

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

以及使用庫從代碼設置委托的函數,如下所示:

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

在C#中,我有以下內容:

    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:'VerifySqListGui.MainWin.ProcessListCallback(int,int,long)'沒有重載匹配委托'AccuMailCoreVerifySq.ProcListCB'

我搜索了一段時間,但我沒有找到答案(顯然)。 我假設有一些函數調用約定不匹配,但我不知道細節。 任何幫助,將不勝感激...

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

如果您在C ++ / CLI中執行此操作,則問題是C ++數據類型。 C ++ int有多大? 32位。 C ++有多long 也是32位。

由於您要與C#進行互操作,因此我將明確使用C#數據類型。 (是的,即使你有一個using namespace System;我仍然在這一行上使用System:: ,使你明白你引用.Net類型。)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM