gpt4 book ai didi

c++ - C++ ATL OleAutomation 错误 424

转载 作者:行者123 更新时间:2023-11-28 07:10:19 30 4
gpt4 key购买 nike

我意外地收到了来自有效对象的错误 424。

我有许多使用 ATL 用 C++ 编写的 OleAutomation 类。

我可以使用早期或晚期绑定(bind)来实例化它们。我可以调用它们的方法和属性并获得预期的结果。

但是,如果我测试它们是否为空,我会收到错误 424。

对这个问题有什么建议吗?

触发错误的Excel VBA代码:

Sub ObjectTest()
Dim o As About

Set o = New About

' this works - prints 1.4
Debug.Print "Version ", o.Version

' generates Error 424
Debug.Print "About ", o Is Null
End Sub

IDL

[
object,
oleautomation,
uuid(...),
dual,
nonextensible,
pointer_default(unique),
public
]
interface IAbout : IDispatch
{
...
[propget, id(3), helpstring("Library version string")]
HRESULT Version([out, retval] BSTR* pResult);
...
};


[
uuid(...)
]
coclass About
{
[default] interface IAbout;
};

注册

HKCR
{
MyLibrary.About.1 = s 'About MyLibrary'
{
CLSID = s '{...}'
}
MyLibrary.About = s 'About MyLibrary'
{
CLSID = s '{...}'
CurVer = s 'MyLibrary.About.1'
}
NoRemove CLSID
{
ForceRemove {...} = s 'Class About'
{
ProgID = s 'MyLibrary.About.1'
VersionIndependentProgID = s 'MyLibrary.About'
ForceRemove Programmable
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
TypeLib = s '{...}'
Version = s '1.0'
}
}
}

和类

class ATL_NO_VTABLE CAbout :
public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>,
public ATL::CComCoClass<CAbout, &CLSID_About>,
public ATL::ISupportErrorInfoImpl<&CLSID_About>,
public ATL::IDispatchImpl<IAbout, &IID_IAbout, &LIBID_MyLibrary, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CAbout()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_ABOUT)

DECLARE_NOT_AGGREGATABLE(CAbout)

BEGIN_COM_MAP(CAbout)
COM_INTERFACE_ENTRY(IAbout)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()



DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}

public:

...
STDMETHOD(get_Version)( /* [out, retval] */ BSTR* pResult );
...

};

OBJECT_ENTRY_AUTO(__uuidof(About), CAbout)

对于为什么它为测试“is null”生成错误 424 有任何帮助吗?

最佳答案

错误是"Object Required"并且仅与 VBA 端相关(与 C++ 和 ATL 无关)。您不应该以这种方式测试 Nullness,因为这是产生错误的原因。

请参阅 Error checking for NULL in VBScript 上的答案对于您实际拥有的 Null 测试选项。

关于c++ - C++ ATL OleAutomation 错误 424,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21087067/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com