在C#中使用带有函数指针和委托的PInvoke

时间:2014-04-14 12:04:32

标签: c# c delegates pinvoke function-pointers

我是C#的新人。

我有一个像这样的C文件(我用它来制作DLL文件):

extern "C"
{
    typedef int (__stdcall * t_fun)(int);

    __declspec(dllexport) int __stdcall ExecuteC(int n, t_fun f)
    {
        return f(n);
    } 
}

然后我想使用PInvoke在我的C#代码中使用它。

public delegate int f_delegate(int n);

[DllImport("ExecuteC.dll")]
        public static extern int ExecuteC(int n, f_delegate func);

public static int FunCS(int n){ return n; }

static void Main(string[] args)
{
    int x = ExecuteC(13, FunCS);
    System.Console.WriteLine(x.ToString());
}

当我开始我的节目时,它立即结束。 这有什么问题?

2 个答案:

答案 0 :(得分:2)

我没有试过运行你的程序,但你确定你不需要

System.Console.ReadLine()

最后调用停止控制台窗口立即消失?

答案 1 :(得分:0)

问题中的代码很好。您可以通过将其粘贴到全新的项目中并发现它完美运行来轻松验证这一点。

我能看到的唯一可信的解释是:

  1. 程序正常运行并在启动后很快结束,因为这是预期的行为。毕竟程序只打印一个值并终止。
  2. 您的代码实际上与问题中提供的代码不同。