Com中后绑定的问题

wavestudio 2003-09-03 06:01:39
我用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;
...全文
55 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧