dll单元
uses
SysUtils,
Classes;
function x(s:string):TString;stdcall;
implementation
{$R *.res}
function x(s:string):TString;
var
TS:TStrings;
begin
TS:=TStringList.create;
TS.add('s');
Result:=TS;
FreeAndNil(TS);
end;
exports
x;
begin
end.
这样返回能取到值,但是在FreeLibrary的时候存在内存方问错误的问题
uses
SysUtils,
Classes;
function x(s:string):TString;stdcall;
implementation
{$R *.res}
function x(s:string):TString;
var
TS:TStrings;
begin
TS:=TStringList.create;
TS.add('s');
Result:=TS;
FreeAndNil(TS);
end;
exports
x;
begin
end.
这样返回能取到值,但是在FreeLibrary的时候存在内存方问错误的问题
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
这个类中有虚方法
而且跨DLL不能使用含string类型的数据类
解决的方法有
不必用VARIANT
你传送PCHAR指针
然后再转成string使用就行strpas
但是我现在想了解一下,如果我要在动态库里面一个接口函数要返回N条String类型的数据。N的条数不确定,大家有什么好的办法?讨论一下,分数不够可以再加。
建议你不要这么做
DLL和主程序的数据最好独立
不要互相使用
尤其是String类型的数据
你可以用PCHAR分配内存后公用指针