Я знаю, что 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()
терпит неудачу. Вероятно, на компьютере не установлена библиотека, которая регистрирует CoClass для RPTAModuleInterface
так что это не может быть создано. Но вам придется взглянуть на фактический HRESULT
чтобы быть уверенным, почему CoCreateInstance()
терпит неудачу.