• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DELPHI自定义结构体数组DLL传递

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
上周在解决上海二次开发的问题时,碰到了如下问题:
DELPHI7 函数原型
function SetDoorGuardPeriods(hPort: THandle; Fun: Byte;  ts: array of TDoorTimePeriods;Count:Integer; week: Byte=0): Boolean;stdcall;
VC6 定义原型
typedef BOOL (PASCAL *ECSetDoorGuardPeriods)(HANDLE hPort, byte Fun,TDoorTimePeriods *ts,const int Count, const byte week=0);
BOOL bSuc = SetDoorGuardPeriods(m_hComHandle,Fun,ts,Count,week);
结果:样本 Vc6调用  :SetDoorGuardPeriods(1900,1,ts[1],1,0)
          DLL传入 :1900,1,ts[2],13012481,96

问题 1 count \week两个数据不对
     2 ts的长度与count相关 len(ts) = count+1
虽然找了很多的资料,但都不能很好的解释上叙问题,最后是在http://heng-feng.com.cn/programmer/mixprogramme/data3480764.html帮助下,
将VC定义修改为:
typedef BOOL  (PASCAL *ECSetDoorGuardPeriods)(HANDLE hPort, byte Fun,TDoorTimePeriods &ts,int cnt, int Count, byte week);
这样的话,就能正常调用了。
问题出现的原因是DLL在取参数栈时,因为ARRORY的问题,多取了一个COUNT参数,导致此问题。



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于Delphi中流的使用(1)用TMemoryStream(内存流)入门发布时间:2022-07-18
下一篇:
尝鲜delphi开发android/ios_环境搭建发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap