dll函数返回tstrings类出错,请问各位大侠给点建议,谢谢! ( 积分: 50 )

  • 主题发起人 主题发起人 xgwzw
  • 开始时间 开始时间
X

xgwzw

Unregistered / Unconfirmed
GUEST, unregistred user!
2个程序sharemem都在第一位
app

//chklst1.Items:= GetTcal;
chklst1.Items.Assign(GetTcal);//报错cannot assign a tstringlist to a tlistboxstrings



dll

function GetTcal:TStrings; stdcall;
begin
Result:=TStringList.Create;
Result.Add('1');
Result.Add('2');
Result.Add('3');
end;

exports GetTcal;
 
>>报错cannot assign a tstringlist to a tlistboxstrings
RTTI是两套的缘故,请带包编译你的exe和dll,至少要带上vcl70.bpl,rtl70.bpl两个包。
 
to zqw0117
chklst1.Items.Assign
function GetTcal:TStrings; stdcall;
都是tstrings类型对象啊!
 
不带包编译经常会出这种划,带包编译就没事了。
 
名字都是TStrings,但是在RTTI上看来,是两个不同的内存地址!这个问题老早在Borland的社区上都讨论过,你按照我说的做就行了,如果你非要问个为什么,请查看相关帮助,或搜索网上资源。
 
http://www.openitpower.com/wenzhang/97/11031_1.html
这个文章,出的错是类似的,原理一样,我按上面的方法改了,没成功。
可能是我全改的有问题。
带包编译就不会报错了。
 
在DLL中最好不要返回TStrings,用PChar或WideString就没有问题了
 
函数返回的时候,内存已经释放
应该由调用程序分配内存,用指针进行转换
 
如果带包编译的话,要发布多少bpl呢!
如何将多个包合并成一个包发布?太多了,比较麻烦啊!
 
在DLL中返回字符串类型的函数好像只能是ShortString,另外在USES部分要引用Sharemem单元。
 
to all 如何将多个包合并成一个包发布?
 
多人接受答案了。
 
后退
顶部