碰到个很奇怪的问题.

paranoia190 2007-04-27 04:18:20
DLL中有一方法TEST.
用于返回SQL的结果,返回类型是OLEVARIANT,使用CLIENTDATASET接收.

function TClient.Test:olevariant;
var
tmp : TClientDataSet;
sql : string;
begin
try
tmp := TClientDataSet.Create(nil);
sql := 'SELECT TOP 1 JE FROM TABLE';
tmp.Data := FIEngine.SeleSql(PChar(sql));
Result := tmp.Data;
ShowMessage(formatfloat('0.00',tmp.Fields.Fields[2].Value));
finally
tmp.free;
end;
end;

如果SQL仅仅是查询某条记录的话.DLL和EXE返回结果一致.
如果执行 SELECT SUM(JE) FROM TABLE,DLL中结果正确.EXE中不正确...
比如DLL中SHOWMESSAGE的结果是11110,EXE中却为10000.
不知道怎么回事了..
...全文
296 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwh202342 2007-04-29
  • 打赏
  • 举报
回复
学习以下
快乐老猫 2007-04-28
  • 打赏
  • 举报
回复
实际上楼主对DLL、函数接口定义很陌生,这个BUG是楼主的书写问题,不属于系统问题。

多看看MS的编程规范,多看看操作系统SDK
快乐老猫 2007-04-28
  • 打赏
  • 举报
回复
olevariant 是个不确定类型,也可以说是不确定长度的类型,这种类型不适合作为DLL函数的返回值,实际上也不适合作为函数的返回值(如果按照标准书写规范来说)。

函数返回值尽量使用定长数据类型,最好记录结构也不要使用,如果需要返回特殊长度的数据,最好使用 VAR、OUT方式定义的参数。

在使用参数返回数据的时候,如果函数在DLL中,应该在调用者(EXE)中开辟足够的缓冲区,并告知被调用者缓冲区长度(使用另外的参数,参考下MS的API定义)。

olevariant 这类不定长(实际上可能是无限大)的数据,不适合传递到函数外,建议使用回调函数,或者消息方式传递给调用者。
paranoia190 2007-04-28
  • 打赏
  • 举报
回复
怎么没有牛淫
brightyang 2007-04-28
  • 打赏
  • 举报
回复
果然很奇怪
brightyang 2007-04-28
  • 打赏
  • 举报
回复
我晕...
有这样的事哇?
把返回类型改改
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
都试过了..DLL中SHOW是正确的....
不了解为什么了
要等牛XXXXX的淫了
IDWB 2007-04-27
  • 打赏
  • 举报
回复
2种情况下都sql事件跟踪看看,应该不会错的啊!
SI 2007-04-27
  • 打赏
  • 举报
回复
试一下一个更笨的方法,来小值测试。1 2 等。
我感觉好像是查询的结果返回的数值已经不一样了。再show可能也就不一样了。
mdejtod 2007-04-27
  • 打赏
  • 举报
回复
等牛人
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
.....我程序里是写的[0]...在这打错了....
问题依然没有解决.偶想知道为什么.哎..麻烦的/
chenzhuo 2007-04-27
  • 打赏
  • 举报
回复
感觉是!
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
tmp.Fields.Fields[2].Value??
这个是写错了.....[0]....
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
用 ASFLOAT也一样的.
试了一下弱智的方法
SELECT CONVERT(VARCHAR(13),SUM(JE)) FROM TABLE
这样就好了.....
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
啥意思?
刚刚又试了一下...
表中只有1条记录,999999999.12
结果EXE中显示999990000
chenzhuo 2007-04-27
  • 打赏
  • 举报
回复
tmp.Fields.Fields[2].Value??
paranoia190 2007-04-27
  • 打赏
  • 举报
回复
没人嘛.

5,928

社区成员

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

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