我写了一个简单的Com dll,然后用两种方法来测试了一下;
这是com类,继承了两个接口 ICaclPi,IDISMath
class ATL_NO_VTABLE CCaclPi :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCaclPi, &CLSID_CaclPi>,
public ISupportErrorInfo,
public IDispatchImpl<ICaclPi, &IID_ICaclPi, &LIBID_PiSvrLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IDispatchImpl<IDISMath, &IID_IDISMath, &LIBID_PiSvrLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
BEGIN_COM_MAP(CCaclPi)
// COM_INTERFACE_ENTRY2(IDispatch,IDISMath)
COM_INTERFACE_ENTRY(ICaclPi)
COM_INTERFACE_ENTRY(IDISMath)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()//idl 文件import "oaidl.idl";
import "ocidl.idl";[
object,
uuid(479FB40E-C622-4F92-A3C4-7B39BBE3930A),
dual,
nonextensible,
helpstring("ICaclPi Interface"),
pointer_default(unique)
]
interface ICaclPi : IDispatch{
[propget, id(1), helpstring("property Digits"), helpcontext(1)] HRESULT Digits([out, retval] LONG* pVal);
[propput, id(1), helpstring("property Digits"), helpcontext(1)] HRESULT Digits([in] LONG newVal);
[id(2), helpstring("method CalcPi"), helpcontext(2)] HRESULT CalcPi([out,retval] BSTR* pbstrPi);
[id(3), helpstring("method AddMath"), helpcontext(3)] HRESULT AddMath([in] LONG lOper1, [in] LONG lOper2, [out,retval] LONG* lresult);
};[
object,
uuid(D4329834-CA15-4a95-9EEE-09045854DA54),// {D4329834-CA15-4a95-9EEE-09045854DA54}
dual,
nonextensible,
helpstring("IDISMath Interface"),
pointer_default(unique)
]
interface IDISMath : IDispatch{
[id(1), helpstring("method SubMath"), helpcontext(2)] HRESULT SubMath([in] LONG lOper1, [in] LONG lOper2, [out,retval] LONG* lresult);
};
[
uuid(38AB726E-85AC-4E96-B1AB-BDC55E3D0D93),
version(1.0),
helpstring("PiSvr 1.0 Type Library")
]
library PiSvrLib
{
importlib("stdole2.tlb");
[
uuid(12358494-F13F-4755-9182-843DD8F35FFB),
helpstring("CaclPi Class")
]
coclass CaclPi
{
[default] interface ICaclPi;
interface IDISMath;
};
};一种是引用 .h和_i.c文件; 可以在测试代码中调用上述两个接口但是如果引用dll ,此时只能看到ICaclPi;请问这是怎么回事。。谢谢