引用c++的一个dll,有一函数原型是getJumbIcon(CONST TCHAR *filePath),c#里参数类型应该怎么定义,传的是字符串

解决方案 »

  1.   


    不行
    对 PInvoke 函数“MyStart!MyStart.Data::getJumbIcon”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
      

  2.   

    [DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]由于默认一般是Winapi,在桌面平台上等于StdCall,如果出现堆栈不平衡,一般表示dll导出函数使用cdecl调用约定。
      

  3.   

    是string 
    LPCTSTR =CONST TCHAR *->String C#
    LPTSTR= -> char *->[MarshalAs(UnmanagedType.LPTStr)] string (C#)
      

  4.   

    C++的成员函数不能这么使用,事实上成员函数还有一个隐藏的this指针,导致参数不匹配。你得导出一个全局函数。
      

  5.   


    不行
    此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
      

  6.   

    [DllImport("DLL文件名.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
    返回类型 getJumbIcon([MarshalAs(UnmanagedType.LPTStr)]string filePath)
      

  7.   


    还是这个错误,用CallingConvention.Cdecl就出现这个错误
    此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。