起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 200|回复: 11

[请求]x3引用第三方命名空间出现的调用问题,急。。。。**

[复制链接]
发表于 2009-3-13 23:35:38 | 显示全部楼层 |阅读模式
procedure Tform1.button1click(sender:TObject);
var  
   lList : Tstringlist;
begin   
    lList := RBSryfy.QueryCustom('Query'+sFYLYID,'xm = ' + ACondition,BReturn);
  lList.SaveToFile('c:\ryfy.xml');
end;


我通过“导入第三方的文档”说明制作了RBSryfydll.dll和RBSryfy.bpl,已经可以导入到X3,也能引用到QueryCustom这个函数
当在X3中运行到 lList.SaveToFile('c:\ryfy.xml');时就报如下的错误,错误在RAR包里面

生成bpl和dll的原始文件.rar

394.31 KB, 下载次数: 43

回复

使用道具 举报

发表于 2009-3-14 09:53:08 | 显示全部楼层
您可以这样,把保存文件的过程放在pas里面去做。就是在dll接口文件中增加一个函数,把querycustom再包装一次,tlist传递到平台有可能有问题。
querycuntsom(原来的参数,保存文件名)
里面处理tlist.savetofile
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 10:55:59 | 显示全部楼层
我里面lList.SaveToFile('c:\ryfy.xml')只是调试用的,因为在X3里面返回出来的lList本身就有问题,不知道是否我原始DELPHI的PAS文件写的有问题啊
回复 支持 反对

使用道具 举报

发表于 2009-3-14 11:01:23 | 显示全部楼层
那就测试一下,不推荐返回tlist这样的对象。我昨天发的例子能看到
EX结尾的函数都是把原始的dll函数重新包装用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 11:04:24 | 显示全部楼层
原始的DLL是别人提供的,不能再包装了,因为这个问题也是比较急的,找不到什么方法tlist这个传递有问题,我也是按你昨天发的那个例子来做的PAS啊
回复 支持 反对

使用道具 举报

发表于 2009-3-14 11:10:07 | 显示全部楼层
能的。你看看我发的例子。EX结尾的函数。请仔细看看。如果不明白请联系我。分机125
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 11:12:36 | 显示全部楼层
我打总机电话多少
回复 支持 反对

使用道具 举报

发表于 2009-3-14 11:14:31 | 显示全部楼层
010-59798677
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 12:10:07 | 显示全部楼层
我里面的PAS是这样写的,在X3程序编译没有问题,但在运行
RBSryfy.QueryCustomNex时出现了QueryCustomNex方法找不到

RBSryfyunit RBSryfy;

interface
uses
  SysUtils, Variants, Classes,Controls,
  Dialogs, StdCtrls,ActiveX;

  const
    dllName='RBSPAdapter.dll';
    FILE_ID=$0188;


procedure __free(l :TStringList ); stdcall;
function QueryCustom(const service,queryCondition: PChar; var success: boolean): TStringList; stdcall;
function QueryCustomNex(const service,queryCondition: PChar; var success: boolean): TStringList; stdcall;


implementation

procedure __free(l :TStringList ); external dllName name '__free';
function QueryCustom(const service,queryCondition: PChar; var success: boolean): TStringList;  external dllName name 'QueryCustom';

function QueryCustomNex(const service,queryCondition: PChar; var success: boolean): TStringList;
begin
  Result := QueryCustom(service,queryCondition,success);
//x3平台处理记录类型传递
//-----------------------------
//function QueryCustom(const service,queryCondition: PChar; var success: boolean): TList; stdcall; external dllName name 'QueryCustom';
//begin
//end;
end;

end.
回复 支持 反对

使用道具 举报

发表于 2009-3-14 12:11:37 | 显示全部楼层
您可能忘记替换您新编译的bpl或者dll了。
重新安装步骤制作一下dll和bpl,然后替换新的文件。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-24 00:02 , Processed in 0.049142 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表