Com中以OleVariant作为参数 与 OleVariant *作为参数区别? (100分)

  • 主题发起人 主题发起人 liuchengr
  • 开始时间 开始时间
L

liuchengr

Unregistered / Unconfirmed
GUEST, unregistred user!
我的Com中有一个Add方法(添加数据)及属性Value(返回当前记录中的Value值)
如果Add中的Value参数前缀为const时,出错。改为var后,正确,为什么?
结构体描述:
PParamItem = ^ParamItem;
ParamItem = record
Name: WideString;
DataType: emDataType;
ParamType: emDataType;
Precision: Integer;
Size: Integer;
Value: OleVariant;
end;

function TParams.Get_Value: OleVariant;
//属性Value的取值的实现函数
begin
IF not (FBof and FEof) then
Result := PParamItem(FList.Items[FIndex])^.Value
end;

function TParams.Add(const Name: WideString;
DataType: emDataType;
ParamType: emParamType;
Precision, Size: Integer;
var Value: OleVariant): Integer;
var
PItem: PParamItem;
begin
New(PItem);
IF FindByName(Name) then
Delete;
Result := FList.Add(PItem);
PItem^.Name := Name;
PItem^.DataType := DataType;
PItem^.ParamType := ParamType;
PItem^.Precision := Precision;
PItem^.Size := Size;
PItem^.Value := Value;
MoveTo(Result);
//移动到新添加的记录
end;
———test.asp(测试用的)———————————————————————
Set xx = Server.CreateObject("Project1.Params")
xx.Add "a",1,1,1,1,"af"
Response.Write xx.Value '这行出错
Set xx=Nothing
---------出错信息--------------------------
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'Value'
/test.asp,行13
 
你的 Value 这个参数是不是设成 out了?
 
Add的定义描述
[
id(0x0000000F)
]
HRESULT _stdcall Add([in] BSTR Name, [in] emDataType DataType, [in] emParamType ParamType, [in] long Precision, [in] long Size, [in] VARIANT * Value, [out, retval] long * Result );
 
那就是了,感觉你的value参数在add方法中好像不应该是输出参数而应该是输入参数
把value改为in 就行了吧
 
我的Value是一直是in的啊
我问的是如果Value的类型是 VARIANT * ,则执行test.asp没有错误
如果Value的类型是Variant时,就出错
 
呵呵,不好意思看错了,我试试看
不过既然是in 为什么不用BSTR 而要用variant呢?
 
因为我也不知道value会传什么值进来,但如果不采用动态分配的话,又可以的,真不知道是怎么一回事
 
你到底是 var时出错还是 const出错?
我刚试了一下in参数 const正确,var出错也就是说OleVariant *出错,OleVariant正确,我觉得这很正常啊
 
你有邮箱吗?我把代码发给你,你只要试一下两中情况
1、Add中的Value类型为Variant
2、add中的Value类型为Variant *
就知道
 
我试过了,variant正确,variant * 出错,我觉得这很正常
mial: bobshen@computersci.net
 
接受答案了.
 
后退
顶部