C# 调用C++ dll,结构体含有指针

q815497048 2015-07-31 05:57:21
C:

struct MyStruct
{
MyStruct * next;
int i;
};

extern "C" char test(MyStruct ms)
{
return 's';
}


extern "C" int t()
{
return 1;
}


C#:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MyStruct
{
public IntPtr next;
public int i;
};

[DllImport(@"ConsoleApplication2.dll", CharSet = CharSet.Unicode)]
public static extern char test(MyStruct ms);

[DllImport(@"ConsoleApplication2.dll", CharSet = CharSet.Unicode)]
public static extern int t();

static void Main(string[] args)
{


int i = t();


MyStruct m = new MyStruct();
IntPtr pv = Marshal.AllocHGlobal(10);
Marshal.WriteInt32(pv, 10);
test(m);


}


int i = t();可以成功。
下面就错了
如何调用test(m);
对 PInvoke 函数“TestApi!TestApi.Program::test”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。



...全文
65 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
q815497048 2015-07-31
  • 打赏
  • 举报
回复
无视 IntPtr pv = Marshal.AllocHGlobal(10); Marshal.WriteInt32(pv, 10); 这两句,没删掉

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧