Com中后绑定的问题
我用ATL做了一个小组件(支持Dual Interface),在Delphi下面用前绑定以及Variant变量调用都没有问题,但用IDispatch接口调用时出错,请高手帮我看看。
procedure TForm1.CallByDispatch();
var
m_IDispatch:IDispatch;
m_pNames:Widestring;
m_pDispIds:TDispID;
m_pVariantArg:TVariantArg;
m_pDispParams: TDispParams;
m_pExcepInfo: TExcepInfo;
m_pRetValue: TVariantArg;
m_IAccessControl:IAccessControl;//用前绑定的方法验证com对象的属性是否改变
begin
m_IDispatch:=CreateOleObject('SecurityMgr.AccessControl.1');
m_IAccessControl:=m_IDispatch as IAccessControl;
m_IAccessControl.UserName:='WaveStudio'; //用前绑定的方法设置com对象的属性
m_pNames:='UserName';
m_IDispatch.GetIDsOfNames(GUID_NULL,@m_pNames,1,GetThreadLocale,@m_pDispIds); //获取属性UserName的DispID;
m_pDispParams.cArgs:=1;
m_pDispParams.cNamedArgs:=0;
m_pDispParams.rgdispidNamedArgs:=Nil;
GetMem(m_pDispParams.rgvarg,sizeof(TVariantArg));
m_pDispParams.rgvarg[0].vt:=VT_BYREF;
GetMem(m_pDispParams.rgvarg[0].pbstrVal,200);
m_IDispatch.Invoke(m_pDispIds,GUID_NULL,GetThreadLocale,DISPATCH_PROPERTYGET,
m_pDispParams,@m_pRetValue,@m_pExcepInfo,Nil);//取Com 对象的UserName属性
//ShowMessage((m_pDispParams.rgvarg[0].pbstrVal));//验证
SysFreeString(m_pDispParams.rgvarg[0].bstrVal);
FreeMem(m_pDispParams.rgvarg[0].pbstrVal);
FreeMem(m_pDispParams.rgvarg);
m_IDispatch:=Nil;
m_IAccessControl:=Nil;
end;