vc++ 中未处理的异常 - HRESULT 失败
Unhandled Exception in vc++ - HRESULT failed
我知道VC++6.0是很古老的语言,但我别无选择,我只是在维护一个现有的程序,我遇到了这个错误
Unhandled exception in Assess.exe (KERNELBASE.DLL): 0xE06D7363: Microsoft C++ Exception
这是我的代码
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IModulePtr pI(__uuidof(RPTAModuleInterface)); //the error is here
在调试和使用 f11
之后,程序转到 COMIP.H
,这里是代码
explicit _com_ptr_t(const CLSID& clsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw(_com_error)
: m_pInterface(NULL)
{
HRESULT hr = CreateInstance(clsid, pOuter, dwClsContext);
//the program goes to CreateInstance Method
if (FAILED(hr) && (hr != E_NOINTERFACE)) {
_com_issue_error(hr);
//the program goes here and show the error msg
}
}
这是 CreateInstance
HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
{
HRESULT hr;
_Release();
if (dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
IUnknown* pIUnknown;
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));
if (FAILED(hr)) {
// the program goes here and return the hr
return hr;
}
hr = OleRun(pIUnknown);
if (SUCCEEDED(hr)) {
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface));
}
pIUnknown->Release();
}
else {
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast<void**>(&m_pInterface));
}
return hr;
}
我不知道这里有什么错误,这是头文件,我认为这里没有错误。知道如何解决这个问题吗?
已更新
在我的 RPTAInterface.tlh
中,我看到了 RPTAModuleInterface
的声明
struct /* coclass */ RPTAModuleInterface;
struct __declspec(uuid("d6134a6a-a08e-36ab-a4c0-c03c35aad201"))
RPTAModuleInterface;
_com_issue_error()
抛出一个您没有捕捉到的 _com_error
异常。您需要将代码包装在 try/catch
中,例如:
try
{
IModulePtr pI(__uuidof(RPTAModuleInterface));
// ...
}
catch(const _com_error& e)
{
// e.Error() will return the HRESULT value
// ...
}
显然 CoCreateInstance()
失败了。在为 RPTAModuleInterface
注册 CoClass 的机器上可能没有安装库,因此无法创建它。但是您必须查看实际的 HRESULT
以确定 CoCreateInstance()
失败的原因。
我知道VC++6.0是很古老的语言,但我别无选择,我只是在维护一个现有的程序,我遇到了这个错误
Unhandled exception in Assess.exe (KERNELBASE.DLL): 0xE06D7363: Microsoft C++ Exception
这是我的代码
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IModulePtr pI(__uuidof(RPTAModuleInterface)); //the error is here
在调试和使用 f11
之后,程序转到 COMIP.H
,这里是代码
explicit _com_ptr_t(const CLSID& clsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw(_com_error)
: m_pInterface(NULL)
{
HRESULT hr = CreateInstance(clsid, pOuter, dwClsContext);
//the program goes to CreateInstance Method
if (FAILED(hr) && (hr != E_NOINTERFACE)) {
_com_issue_error(hr);
//the program goes here and show the error msg
}
}
这是 CreateInstance
HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
{
HRESULT hr;
_Release();
if (dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
IUnknown* pIUnknown;
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));
if (FAILED(hr)) {
// the program goes here and return the hr
return hr;
}
hr = OleRun(pIUnknown);
if (SUCCEEDED(hr)) {
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface));
}
pIUnknown->Release();
}
else {
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast<void**>(&m_pInterface));
}
return hr;
}
我不知道这里有什么错误,这是头文件,我认为这里没有错误。知道如何解决这个问题吗?
已更新
在我的 RPTAInterface.tlh
中,我看到了 RPTAModuleInterface
struct /* coclass */ RPTAModuleInterface;
struct __declspec(uuid("d6134a6a-a08e-36ab-a4c0-c03c35aad201"))
RPTAModuleInterface;
_com_issue_error()
抛出一个您没有捕捉到的 _com_error
异常。您需要将代码包装在 try/catch
中,例如:
try
{
IModulePtr pI(__uuidof(RPTAModuleInterface));
// ...
}
catch(const _com_error& e)
{
// e.Error() will return the HRESULT value
// ...
}
显然 CoCreateInstance()
失败了。在为 RPTAModuleInterface
注册 CoClass 的机器上可能没有安装库,因此无法创建它。但是您必须查看实际的 HRESULT
以确定 CoCreateInstance()
失败的原因。