dll动态调用完毕,将dll中函数计算出的值赋给其它变量时出错。

syfan 2006-09-24 10:29:11
function TFrmReg.Getbc(dllname,ProcName,s:string): string;
var
aLib:THandle;
ss:Pchar;
Proc:function(Str:Pchar):Pchar; stdcall;
begin
aLib:=LoadLibrary(PChar(dllname));
if alib>=32 then
begin
Proc:=GetProcAddress(aLib,PChar(ProcName)); if Assigned(PChar(ProcName)) then
begin
ss:=Proc(Pchar(s));
end;

end;
FreeLibrary(aLib);
GetZZh:=string(ss);
end;

经根踪调试,到最后一行 GetZZh:=string(ss); 出错。

且以上ss的值也计算正确的。


...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
syfan 2006-09-28
  • 打赏
  • 举报
回复
多谢楼上的几位指点, 使用ShortString就没问题了。


wywry 2006-09-27
  • 打赏
  • 举报
回复
使用ShortString类型
柯本 2006-09-26
  • 打赏
  • 举报
回复
编写dll的一条重要经验:
尽量不要在dll中返回char *类型的值,把它作为参数就可以了,因为如果你是返回dll中的临时变量,肯定出错
syfan 2006-09-25
  • 打赏
  • 举报
回复

FreeLibrary(aLib); 这一句也出错
amdwinter 2006-09-24
  • 打赏
  • 举报
回复
工程文件都加上sharemem单元

5,392

社区成员

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

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