-1

下面是我在 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); 

我该如何实施?

4

2 回答 2

0

一种方法是将 C# 程序集作为类型库导出并从 C++ 中使用它,就像它是一个 COM 组件一样。

在 Visual Studio 命令提示符下使用 TlbExp.exe 将 C# 程序集导出为类型库。然后使用 RegAsm.exe 注册类型库。然后在 C++ 代码中使用#import 指令来导入类型库。您现在可以像使用 COM 类一样使用 C++ 中的 C# 类。

有关更多详细信息,请参阅: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

于 2012-09-18T11:33:43.987 回答
0

您可以发送指向托管 .net 函数的指针,并从未损坏的代码(回调)中调用它。

详情请看http://habrahabr.ru/post/130690/(如果需要,请使用 google 将其从俄语翻译,但您需要查看最后两个代码示例)。

还要检查您的代码调用 - 它应该在托管和非托管方面都符合(在 C 代码中使用 __ stdcall并在DllImport属性中使用CallingConvention = CallingConvention.Cdecl )。

于 2012-09-18T12:09:00.903 回答