关于Winform动态调用Delphi DLL问题

xiyanyun 2017-10-12 11:24:49
Delphi DLL:
DLL名称:TestInterface.dll
DLL接口名称:TestMethod
DLL接口声明:Function TestMethod(ax1, ar1 : PChar) : Integer;
ax1和ar1的参数类型都是PChar

我在C#中是这样声明的:
[DllImport("TestInterface.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, PreserveSig = false)]
public static extern int TestMethod(IntPtr ax1, IntPtr ar1);

调用TestMethod一直报以下错误:
对 PInvoke 函数“HYOutRegiCashFacade!HYOutRegiCashFacade.Business.PrintInterface::TestInterface”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
...全文
108 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiyanyun 2017-10-12
  • 打赏
  • 举报
回复
还是不行,编码都试过Ansi,Auto,Unicode,None还是报签名有问题,原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 两个参数的类型都改成string,string还是报签名问题,string,StringBuilder也不行,一样还是报签名问题。
真相重于对错 2017-10-12
  • 打赏
  • 举报
回复
那两个函数如果是传入参数,直接用string。且注意编码 如果有传出参数,试一下,stringbuilder,且传入前要构建一个比较大的长度?

110,535

社区成员

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

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

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