以下是我在c#...
中的代码此处回调仅在c#中实现。 我想要一个来自c ++ dll的回调
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
class Program
{
// [DllImport("C:/Users/kool/Documents/Visual Studio 2010/Projects/DLL/Debug/DLL.dll", CallingConvention = CallingConvention.Cdecl)]
static void Main(string[] args)
{
function1(function2); // i want thia function2 to be fetched from ++ dll
}
public delegate void fPointer(); // point to every functions that it has void as return value and with no input parameter
public static void function1(fPointer ftr)
{
fPointer point = new fPointer(ftr);
point();
}
public static void function2()
{
Console.WriteLine("Bla");
}
}
我将创建一个dLL,我将把function2发送到
function1(function2);
我该如何实现呢?
答案 0 :(得分:0)
一种方法是将C#程序集导出为类型库,并使用C ++将其作为COM组件使用。
在Visual Studio命令提示符中使用TlbExp.exe将C#程序集导出为类型库。然后使用RegAsm.exe注册类型库。然后在C ++代码中使用#import指令导入类型库。您现在可以使用C ++中的C#类,就像它们是COM类一样。
有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/ms172270.aspx
编辑:抱歉,您想要做的是:使用C#中的C ++,还是使用C ++中的C#?
任何一个都是可能的。上面的链接解释了如何使用C ++中的C#。这个解释了如何使用C#中的C ++:http://msdn.microsoft.com/en-us/library/z6tx9dw3.aspx
答案 1 :(得分:0)
您可以发送指向托管.net函数的指针,并从未损坏的代码(回调)中调用它。
详细信息http://habrahabr.ru/post/130690/(如果需要,请使用Google将其翻译为俄语,但您需要查看最后两个代码示例)。
同时检查你的代码调用 - 它应该遵守托管和非托管两方(在C代码中使用__ stdcall ,在中使用 CallingConvention = CallingConvention.Cdecl DllImport 属性)。