dll封装com对象问题?

jndragon 2004-12-08 09:29:09
在dll中封装com对象,rtxobj,rtxparams都是com对象,函数代码:
Function ReturnSMS(sender:string; receiver:string; sms:string;
cut:integer; notitle:integer):pchar;
var
se:string;
strerror:pchar;
RTXObj:variant;
RTXParams:variant;
begin
CoInitialize(nil);
RTXObj:= CreateOleObject('RTXServer.RTXObj');
RTXObj.name := 'SMSOBJECT';
RTXParams:= CreateOleObject('RTXServer.Collection');

RTXParams.Add('SENDER', sender); //'短信发送者
....
end;

函数在delphi中调用能正确的返回结果,但在pb中调用发现当执行到“RTXParams.Add('SENDER', sender); ”就报内存错误,是不是代码有问题?
...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jndragon 2004-12-09
  • 打赏
  • 举报
回复
还是在RTXParams.Add('SENDER', sender);中的sender出错,
是传递参数类型的问题,不过用widestring,pwidechar等类型也都不行。
halfdream 2004-12-08
  • 打赏
  • 举报
回复
下面纯属猜测。。。。。。。。。。。。。呵呵。。


1,
Function ReturnSMS(sender:string; receiver:string; sms:string;
cut:integer; notitle:integer):pchar;

这是一个DLL的函数吗?参数使用STRING类型便是问题!

DELPHI,BCB的DLL传STRING类型的时候,是使用BORLANDMM。DLL来保持STRING内存管理。
PB是不用使用BORLAND公司的那DLL的。
当然,这并不意味着这会出问题,

2,COM串参数通常是BSTR,也就是DELPHI中的WIDESTRING,当DELPHI代码传STRING参数时候,
实际上编译器会加上一点转换的代码。但你的DLL中的Sender,并不是DELPHI代码创建的STRING。
这个转换就出问题了。

newmsoft 2004-12-08
  • 打赏
  • 举报
回复
敢问楼主,rtxobj是腾讯通里的对象吗?
jndragon 2004-12-08
  • 打赏
  • 举报
回复
不明白吗?
sixgj 2004-12-08
  • 打赏
  • 举报
回复
……
halfdream 2004-12-08
  • 打赏
  • 举报
回复
呵。。没有PB,无法调试楼主程序。

不过我想,为什么楼主不用做一个COM来封装呢?
这样可以避开一些普通DLL的问题。
jndragon 2004-12-08
  • 打赏
  • 举报
回复
halfdream老兄:
不用参数,在dll中直接附值,即将
CoInitialize(nil);
RTXObj:= CreateOleObject('RTXServer.RTXObj');
RTXObj.name := 'SMSOBJECT';
RTXParams:= CreateOleObject('RTXServer.Collection');
RTXParams.Add('SENDER', sender);改为
.....
RTXParams.Add('SENDER', ‘1001’);
程序通过,但是在调用RTXObj.call2(4097,RTXParams)时,pb提示"0x042c76c1"指令引用的“0x00000000”内存,该内存不能为“writtern”
jndragon 2004-12-08
  • 打赏
  • 举报
回复
rtxobj是腾讯通里的对象

1,183

社区成员

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

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