使用variant传递string失败。(200分)

  • 主题发起人 主题发起人 远帆
  • 开始时间 开始时间

远帆

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DLL中使用variant传递string数据失败,提示地址错误。可是无法用F7跟踪。好像是生
存期自动管理错误。不知如何解决?
下面是一段例子代码:
DLL project中
procedure x(var d:Variant);
begin
d:='test';
end;

exports
x;

begin
end.


测试project中:
procedure x(var d:Variant);External 'project1.dll';

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
d:Variant;
begin
x(d);
Edit1.Text:=d;
end;
 
没遇过,关注!
 
在你的dll单元uses 的第一个位置上添加sharemem,
在你的测试单元中uses 的第一个位置上也添加sharemem,主要一定要在第一个位置,也就是说
你在dll和测试单元要第一个引用sharemem.
 
yfdciom
你说的是在DLL中传递string吧?
variant中存放的string数据类型从本质上说是指针。应该不用的吧?
 
加上 sharemem, 可以传递的
 
试了一下,加上sharemem也不行。但是是在关闭程序时出错,真奇怪。
 
你为何一定要用variant传递参数,用pchar最保险。不用sharemem.
 
因为我要传递的参数是不定的,也可能是其它的数据。所以用了variant,在DLL中使用
Pchar,string,shortstring我都用过,使用variant是第一次。
 
这好办,你在dll里定义几个重载函数,分别满足不同的类型不就完了吗?
delphi的优势,好好利用一下。
 
我开始也这样想过。其实在程序中也用到了重载,
可是我定义了十几种类型,如果一个一个的重载不是把人累死了吗?何况我是在DLL中包装
了类了的,所以每一个引出的函数得声明两次(抽像类还得声明一次),那样做。。。
所以我现在用variant作为参数传递。这样以后在扩充数据类型的时候也方便一些。
 
somebody?anybody?
help me!
 
这就怕累了,microsoft的几乎每个api都有类似textout,textoutA,textoutW的声明,
上千个函数都声明了不知多少遍。别抱怨了。
 
如果能用variant变量达到要求不是很好的事吗?为什么要搞那么复杂?
 
我试了各种办法,没招了,看别人能否帮您吧!
 
嗯,不管如何,谢谢你。
 
把string写入Stream,再把stream转成Variant!
接受反过来!
 
我也在关注
做了一个试验,把variant改为string 或 char。
但是是在关闭程序时也是出错,真奇怪。 哪里不对了?
 
to zzhi兄弟:
stream也不是variant的标准变量啊,用stream不是更玄?
 
ZZHI兄弟是正确的。
哎,真是痛苦,我还特意看过olevariant,没想到真是这个原因。
谢谢各位。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部