本帖最后由 Lyout 于 2010-04-20 11:41:01 编辑

解决方案 »

  1.   

    public delegate int myfun(uint machineNo, int recordCount);
    [DllImport("Interface.dll", CharSet=CharSet.Auto)]
    public static extern int showmessage(myfun fun);
    //...
    private void btnStart_Click(object sender, EventArgs e) {
        showmessage(new myfun(execcmd));
    }
    int execcmd(uint machineNo, int recordCount){
    //...
    }C++中的LONG也是32位的数据,改C#中的int另外C++中的导出函数默认使用_cdcel的方式导出,而C#中的函数调用是_stdcall,你将C++中的函数和回调函数的导出方式改为_stdcall
      

  2.   


    谢谢,但是我查了一下 CALLBACK 在 vc 里面就是 __stdcall 的一个宏。应该也是可以的。
    现在我这样定义,第一个值可以取到,就是后面的参数取不到值,老是0
      

  3.   

    我的定义是这样的:
    void CALLBACK showMessage(u_long id, u_long uid);
    传值 的时候 id 可以取到, 但 uid 老是0
      

  4.   


    确实是参数定义的问题,c++ 里面是 u_long,C# 里面只能定义为 uint, 哎。难怪后面的值取不到了。