djjsl:
昨天我给你发了多次Email都被退回来了,你的信箱有问题?
我现在把它贴在这儿.
--------------------------------------------------------------------
你想用IObjectConstruct的话,首先要有IObjectConstruct的接口定义,
通过以下方法可以得到:
在Delphi中将Win2000下的comsvcs.dll import进来,
默认的话会在Delphi的Imports目录下给你生成COMSVCSLib_TLB.pas这个文件,
里面有IObjectConstruct和IObjectConstructString接口的定义.
在你的程序里应用这个文件.
并将IObjectConstruct加入你的类中, 如:
TMyServer=class(TAutoObject, IObjectConstruct)
......
end;
然后你参照我下面的代码写IObjectConstruct的Construct方法.
这段代码通过IObjectConstruct取得ADO的Connection String,
并保存在mConnectionString这个类成员中.
我觉得开发COM组件,还是ATL最好用,而且也很简单.
STDMETHOD(Construct) (IDispatch *pCtorObj)
{
_bstr_t strDesc;
HRESULT hr;
IObjectConstructString *pStr;
BSTR strConstruct;
if (pCtorObj != NULL) {
hr=pCtorObj->QueryInterface(IID_IObjectConstructString,(void **)&pStr);
if (SUCCEEDED(hr)) {
hr=pStr->get_ConstructString(&strConstruct);
if (SUCCEEDED(hr)) {
mConnectionString=strConstruct;
SysFreeString(strConstruct);
}
pStr->Release();
}
else {
_com_error err(hr);
strDesc=err.Description();
ATLTRACE(err.ErrorMessage());
}
}
else {
hr=E_POINTER;
strDesc=L"An invalid pointer was passed to Construct";
}
if (S_OK==hr)
return hr;
else
return Error((LPOLESTR)strDesc,IID_IProduct,hr);
}