如何给dll的函数传递对象参数cannot assign a tlistboxstrings to a tstringllist(50分)

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

xgwzw

Unregistered / Unconfirmed
GUEST, unregistred user!
dll中有个函数
myfun(fstring:tstrings);int;

主程序调用时怎么传递对象参数呢
如 myfun(listbox1.items) 好像不行,请各位支招 都加了sharemem
 
你那个需要引用sharemem单元。
 
引用哪个不太好,dll是windows系统下的程序模块形式,string等是delphi 下的 数据类型不适合做接口传输,最后用pchar 或者直接用 array of char +len 做接口这样比较好
 
dll入口是指什么呢
library MyFuncLib;
uses
Windows,
SysUtils,
Classes;

procedure DLLEntry(reason: DWORD);
begin//dll入口是这部分呢?
case reason of
DLL_PROCESS_ATTACH:
CoInitialize(nil);
DLL_PROCESS_DETACH:
CoUninitialize();
end;
end;

begin
DLLProc := @DLLEntry;//dll入口还是这部分?
DLLEntry(DLL_PROCESS_ATTACH);
end.
 
传对象的引用只要不改变item的个数问题就不大 传递仅仅是指针
但老兄你传递的是
tlistboxstrings tstringllist 这2个类型不兼容啊
也没有直接的继承关系
就像参数是整形 你给他字符串一样的问题啊
 
to avalon 是这样的啊 我传递的是对象listbox1.Items,但是delphi报错是那样子的

dll中有个函数
myfun(fstring:tstrings);int;

主程序调用时怎么传递对象参数呢
如 myfun(listbox1.Items) 好像不行,请各位支招 都加了sharemem


>>传递仅仅是指针
请问怎么传递 稍微写点代码提示 谢谢
 
你要传递TStrings?
指针就是声明成pointer了,但是不大灵。。。
你可以传递一个IString....

老蓝这样想,MS不知道有TSTRINGS,你可以选择variant传递数组,可以使用指针(不过,我几个都不灵),可以传递IString(这个接口完全支持的)。
 
to 蓝叶菱
这个接口那里有下载的单元
IString
 
这个问题都解决不聊??
 
to delphfans
我是在不知道怎么搞好了
 
不是告诉你了吗,如果一定要使用TStrings,String等类型,就要在DLL、EXE的项目文件中第一个包含sharemem单元就可以了,这是最简单、也是最安全的方法,否则你就要自己实现delphi的内存管理。因为以上类型的分配是在各自的内存管理器中完成的。
 
to appfirst
DLL、EXE的项目文件中第一个都已经包含sharemem单元,还是不行,所以。。。
 
你是使用了assign方法了吧,如果是那改成一个一个属性复制的方法。
 
是赋值。
 
因为在这种情况下StrList.Assign(StrLists)会失败,原因是
if Source is TStrings then
这句会返回false。
 
多人接受答案了。
 

Similar threads

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