none
请教一下:C#动态调用C++dll的问题 RRS feed

  • 问题

  • 说明一下,不是采用PIvoke,是采用

            [DllImport("kernel32.dll")]
            static extern IntPtr LoadLibrary(string lpFileName);
            [DllImport("kernel32.dll")]
            static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);

    以及

    Marshal.GetDelegateForFunctionPointer(farProc,t);

    的方式

    问题是:

    1:

    C++原型

    extern "C" __declspec(dllexport)  void MyFun2(int* a,int* b)
    {
        *b = *a;
    }
    采用的委托:

    public delegate void Fun(ref int a, ref int b);

    前面都没有问题,

     int a = 1;
                    int b = 2;
                    t(ref a,ref b);

    报错:

    A call to PInvoke function 'test!test.Fun::Invoke' has unbalanced the stack. 。。。。。。

    2:

    原型:


    extern "C" __declspec(dllexport) void MyFun3(char* str)
    {
        str="abc";
    }

    委托

    public delegate void Fun(StringBuilder str);

    同样是前面都没有问题,但是调用委托时:

    var str = new StringBuilder(10);

    t(str);

    同样的错误

    3、C++dll中想返回字符串数组到C#中该如何做?动态调用的。

    如果我表述的不清楚,我可以补充。

    非常感谢在百忙之中回帖的人,我是实在没办法才来问的,我尝试了很多种委托参数,均是同一种错误。

     


    我的第一技术博客
    2010年4月20日 12:26

答案

  • 你好!

         一般是你声明的托管函数和非托管函数的签名不匹配导致的,你检查一下相应的参数和返回值!


    周雪峰
    2010年4月25日 8:51
    版主

全部回复

  • 你好!

         一般是你声明的托管函数和非托管函数的签名不匹配导致的,你检查一下相应的参数和返回值!


    周雪峰
    2010年4月25日 8:51
    版主
  • unbalanced the stack说明堆栈不平衡,一般是参数个数和函数要求的不一致造成的。
    2010年4月25日 14:33