调用C++的dll报内存错误

newfang 2010-08-01 03:53:10
dll内函数声明:

LONG PASCAL ReadTime(HANDLE hCom,BYTE DevNo,LPSTR pTime)
功能说明:读取设备时钟。
参数说明: hCom 为端口句柄
DevNo 为设备号(0——254),255 为广播号
pTime 返回设备时钟

delphi内调用:
function ReadTime(hComm: HWND;DevNo: Byte;Var PTime: PChar): Integer;stdcall;external '201Comm.dll';

if hComm > 0 then begin
GetMem(buf,15);
iTmp := ReadTime(hComm,0,buf); //调用时候报内存错误
……
FreeMem(buf);
end;
...全文
184 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看不出代码有什么问题啊,是不是我不认真啊,把分给我吧,嘿嘿!
zcfzcf001 2010-08-02
  • 打赏
  • 举报
回复
解释不清,刚一看时就觉得应该是参数问题,但是不知道这个差异是什么。
likeyrain 2010-08-02
  • 打赏
  • 举报
回复
接分,不说明一下原因?
sun_cathay 2010-08-02
  • 打赏
  • 举报
回复
ding
SuperTitan007 2010-08-02
  • 打赏
  • 举报
回复
看来你用的是delphi 2010吧?这里的Pchar默认为Pwidechar

LPSTR是字符串指针,每个字符占1个字节,所以应该用Pansichar,当然用0下标开始的字符数组也是一样
kye_jufei 2010-08-02
  • 打赏
  • 举报
回复
c++中的char对应的就是delphi中的PAnsiChar...
hello_world888 2010-08-02
  • 打赏
  • 举报
回复
ReadTime(hComm,0,buf)这个参数有问题塞,ReadTime(hComm, 0 buf^),应该是这样才对嘛.
newfang 2010-08-02
  • 打赏
  • 举报
回复
是d7,要不我也很晕~~~
  • 打赏
  • 举报
回复
你用的不是D7???????????
newfang 2010-08-02
  • 打赏
  • 举报
回复
用PChar不可以,用PAnsiChar,代码里面用静态数组可以,动态分配不知道为什么不行。

var buf: array[0..14] of char;

试出来的,知其然不知其所以然。期待妖哥帮忙解释……
SuperTitan007 2010-08-01
  • 打赏
  • 举报
回复
是不是分配的内存空间少了?
newfang 2010-08-01
  • 打赏
  • 举报
回复
嘿嘿~~~自己搞定咧·~~散分·~!!

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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