DLL的参数能不能是TSTRINGLIST?(100分)

  • 主题发起人 主题发起人 eire
  • 开始时间 开始时间
E

eire

Unregistered / Unconfirmed
GUEST, unregistred user!
DLL:
function _Connection(Params:variant;rRecords:TStrings):Boolean;stdcall;

调用:

function connect(Params:variant;ST:TSTRINGS):BOOLEAN;Stdcall;external 'TEST.dll' name

'_Connection';


VAR
SSS:TSTRINGLIST;
Begin
if not init(self.Handle) then
exit;
A := VarArrayCreate([0, 6], varVariant);
A[0] := 'XXXXXXXXXXXXX';
A[1] := 'XXX';


SSS:=tstringlist.Create;
// SSS.free;//如果在这儿FREE的话没有问题.
try
connect(a,sss)

Memo1.lines.assign(sss);
finally
freeandnil(sss);
///出错:Invalid pointer operation.
end;

end;
 
你的connect做了什麼操作啊。
 
传指针看看
 
function _Connection(Params:variant;rRecords:TStrings):Boolean;
begin
.....

rRecords.Add(fResultRec.Text);
end;
 
TO Milpas:
怎么传呢能详细点谢谢了.

 
要不你往sss里弄点字符串进去再试试。
 
最好不传递对象,谁创建谁释放更清晰合理
你可以传递TStrings.Text属性的字符串。在函数里创建TStrings实例,再附值给他
 
re:
DLL的参数能不能是TSTRINGLIST
可以,但是要在你的DLL工程文件和调用它的工程文件的引用部分第一个加入sharemem

uses
sharemem,
 
在DLL中用完TStringList后将置nil,不要释放
 
DLL里面引用的任何涉及string分配的类以及string类型本身都会出现问题,引用ShareMem单元吧。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
937
SUNSTONE的Delphi笔记
S
后退
顶部