替一个美眉问的,她的ie只能看题目,不能看内容(50分)

  • 主题发起人 主题发起人 heidongzhiling
  • 开始时间 开始时间
H

heidongzhiling

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]
类型库中定义method
该method的参数的type和modifer该怎么定义?
我的这个method需要一个输入和一个输出,通过输入得到输出
可以这样定义的吗?如下:
variant [in]
variant* [out,retval]
对于out和retval,我是非常不理解,要得到返回的输出值,或者说要调用由输入得到的输出,
正确的应该怎么定义?
 
就是这样定义:
variant [in]
variant* [out,retval]
in 表示传入的参数
Out 表示传出的参数(会在参数前加上var)
如果是[out,retval],则表示是一个返回值,即此method是一个function
[out]或[out,retval]都必须在类型后加一个*号,例如:long* BSTR*等等
 
PS:看不到内容就把IE升级一下
 
问题继续深入好吗?
如果是:variant* [out,retval]
那么就有:function ......( ):OleVariant;
怎么样获得输出参数?
获得输出参数后是不是要接着写:result:=...
是不是要写result才可以在客户端得到远程模块返回的信息,result要等于什么?
在客户端要怎么写才能把客户输入的东西如数字传给远程模块里的输入参数然后获得返回值
 
服务器:
function getadd(const i,j:integer):integer;
begin
result:=i+j;
end;
这里面定义的参数是:i;long;[in]
j;long;[in]
vR;long*;[out,retval]
客户端调用:
x:=(dcomC.getserver as Ixxx).getadd(12,13);//x=25;
 
x你定义成什么类型的?
如果输入参数是在运行期随机给的呢?
 
三层中传递参数,如果是Integer(Long)、String(BSTR)、Boolean(VARIANT BOOL)可以
将接收函数返回值的变量定义为相应类型,如楼上的X可以定义为
var
x: integer;
如果是其它复杂的类型,如数据集等,可以定义为OleVariant类型
如:
var
V: OleVariant;
begin
V := GetData(FTableName);
//GetData为应用服务器上的方法,返回数据集
ClientDataset.Data := V;
end;
 
我替美眉结帖
 
后退
顶部