![](/img/trans.png)
[英]C++/CLI : How do I declare abstract (in C#) class and method in C++/CLI?
[英]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.