大家帮忙看看:三层问题(100分)

  • 主题发起人 主题发起人 zhengzhijia
  • 开始时间 开始时间
Z

zhengzhijia

Unregistered / Unconfirmed
GUEST, unregistred user!
我在com服务器中定义了一个接口函数:
procedure TLoginDemo.AddData(mystring: OleVariant);
var
i:integer;
begin
if VarIsArray(mystring) then
for I := 0 to VarArrayHighBound(3, 1)do
Form1.ListBox1.Items.Add(mystring);
end;

在客户端通过如下传递数据给服务器,为何不成功?
procedure TForm1.Button3Click(Sender: TObject);
var
str:oleVariant;
mystring:Tstrings;
i:integer;
begin
str := VarArrayCreate([0, 3], varOleStr);
mystring := tstringlist.Create;
for i:= 0 to 3do
mystring.Add(inttostr(I));
for I := 0 to 3do
str := mystring.Strings;
DCOMConnection1.AppServer.AddData(Str);
end;
2、不知道开发三层,服务器端如何调试?
 
如果能把变体字符传数组传到服务器端就ok.
试验成功——马上给分!
 
你的接口的方法参数是怎么定义的?
参数类型声明为 VARIANT * 试试(不管是in还是out)
另外,string传递都要用BSTR(实现为WideString)
 
接口定义如下:
参数:variant 没有管(in or out 是 [] );
没有定义成指针;因为这个值不需要回传。
我现在的参数是一个定长的字符串数组,51个字符串;所以不能bstr。
 
是输入参数就定义成in
不管要不要回传,都定义成 VARIANT *
不要问为什么,我也纳闷,我也遇到过,就要这样才能成功
我用的是多维多层数组(数据里的数据也是variant型,variant数据里也是数组)
 
能不能给我一个example
 
如果这个com是用程序调用的话可以用variant作输入参数,给asp页面调的时候就要用 VARIANT *,我碰见过,不知道什么原因。
不过我觉得如果你要输入一个字符串数组的话不必一定用variant,variant效率不高。可以用分割符串成一个字符串,比如用#13#10最方便,com中直接Form1.ListBox1.Items.text:=mystring 就可以
 
通过研究发现,DELPHI中封装了iSTRINGS接口。说可以实现TSTINGS类的自动化。
服务器端我这样写的:不知到对不对?
procedure TLoginDemo.SETSTR(const MYSTRING: IStrings);
VAR
I:Integer;
begin
for i:= 0 to 3do
Form1.ListBox1.Items.Add(MYSTRING.Item[0]);
end;
但不知道,客户端如何写?
 
这么简单的问题干吗搞这么复杂?
服务器端:
procedure TLoginDemo.adddata(const MYSTRING: WideString);
begin
Form1.ListBox1.Items.text:=MYSTRING;
end;
客户端:
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
str:string;
begin
for i:=0 to 3do
str:=str+inttostr(i)+#13#10;
DCOMConnection1.AppServer.AddData(Str);
end;
 
vararrayhighbound函数不对,参数错了,另外,从服务器端读出数据后进行处理,为什么会有Form1.listBox1...,这些应该在客户端才应该有的。
 
这个问题结束,不过我没有得到满意的答复,我另一个贴子;变参返回字符串,客户端提示内存锁定??????
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2337572
 
后退
顶部