有关ActiveX, Delphi, VC求救
兄弟用Delphi编写了一个ActiveX控件,该控件中的有些属性是接口类型,在Delphi和VB下用的爽爽的,可是到VC中就死机拉奇了。举例如下:
-----------------------------------------------------------
AddRecord在TMyControl中定义,返回是IRecord类型,
在Delphi总的实现是TRecord = class(TAutoIntfObject, IRecord)
//////////////////////////////////////////
function TMyControl.AddRecord: IRecord
var
rec: TRecord;
begin
rec := TRecord.Create;
...
result = rec as IRecord;
end;
IRecord中有方法AddCell(AString: BSTR)
-----------------------------------------------------------
VB中调用:
with MyControl1.AddRecord
.AddCell "aaa"
.AddCell "bbb"
end with
-----------------------------------------------------------
Delphi中调用:
with MyControl1.AddRecord do
begin
AddCell('aaa');
AddCell('bbb');
end;
-----------------------------------------------------------
VC中调用:(VC包装生成CRecord类)
方法1:
CRecord rec = m_Grid.AddRecord;
rec.AddCell("aaa"); // -->弹出非法访问地址错(出错位置:COleDispatchDriver::InvokeHelperV中m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags, &dispparams, pvarResult, &excepInfo, &nArgErr);)
方法2:
CRecord * pRec = &m_Grid.AddRecord;
pRec->AddCell("aaa");
不出错,也不运行,追踪到源码COleDispatchDriver::InvokeHelperV中 m_lpDispatch == NULL 退出了
-----------------------------------------------------------
我现在搞不清到底是ActiveX控件有问题还是在VC中的调用方法不对?