VC调用Delphi动态库

colorsky_010 2017-09-23 11:03:37
用户提供了一个Delphi实现的动态库,现在需要在VC环境下调用,动态库中的函数用到了结构体,这些类型,不知道在VC下如何定义,求解答

TYcDllVar = record
SYS_RWQ: ShortString;
SYS_RWCOM: SmallInt;
SYS_RWBAUD: LongInt;

SYS_SHOWDLLINFO: Boolean;
SYS_DLLOUTINFO: ShortString;

SYS_LOGIN: ShortString;
SYS_DBQH: ShortString;
SYS_OldUser: ShortString;
SYS_OPID: ShortString;
SYS_OPCode: ShortString;
SYS_DJBASE: Integer;
SYS_SQBASE: Integer;
end;
...全文
1128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可能的原因: 1. 对shortstring处理错误,shortstring[0]是串长度,从[1]开始才是数据,如果用shortstring传入某些命令,需要正确写入长度和串数据; 2. 结构对齐的问题,Delphi中默认对齐是8字节,C++中也要使用一致的对齐设置,#pragma pack(8) 3. 调用方式不对,比如没有使用正确的调用约定。
colorsky_010 2017-09-27
  • 打赏
  • 举报
回复
函数中将上述结构体作为了参数,用C++也封装了一个同样的结构体,调用该函数,结果内存溢出,该动态库本身应该是没有问题的,因为在DELPHI可以正常调用
leeky 2017-09-25
  • 打赏
  • 举报
回复
麻烦主要在于boolean,如果dll是别人写的(无源码),最好你再封装一次(记录类型重新定义)。
  • 打赏
  • 举报
回复
boolean并没有什么麻烦,直接对应C++的bool类型(注意不是BOOL)。
  • 打赏
  • 举报
回复
typedef struct TYcDllVar { char SYS_RWQ[256]; // [0]: string length, [1]..[255]: string short int SYS_RWCOM; int SYS_RWBAUD; bool SYS_SHOWDLLINFO; // ... };

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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