在执行CreateInstance函数

时间:2019-07-05 08:55:09

标签: c++ com smart-pointers ocx createinstance

我正在设置程序以从ocx文件创建COM连接。

我正在使用带有调试x86的Visual Studio 2019。它可以正确生成.tlh和.tli文件。

我的测试失败:

  • 使用visualtudio 2017和2019
  • 使用CoCreateInstance

    IMachine* machine = NULL;
    
    // this gives the same error:
    HRESULT hr2 = CoCreateInstance(CLSID_Machine, NULL, CLSCTX_INPROC_SERVER, 
                                   IID_IMachine,
                                   reinterpret_cast<LPVOID*>(&machine)); 
    
  • CLSID_Machine替换为_uuidof(IMachine)

  • CLSID_Machine替换为LPCWSTR clsidString

这是我的代码的一部分:

#import "lib.ocx" no_namespace , named_guids

HRESULT hr1 = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
try {
    if (SUCCEEDED(hr1))
    {
      IMachinePtr machineCUPtr;
      HRESULT hr2 = machineCUPtr.CreateInstance(CLSID_Machine, NULL, 
                                                CLSCTX_INPROC_SERVER); //Failure

       if (FAILED(hr2))
        {
              std::cout << "Fail:" << hr2 << std::endl;
            }
            else {
              std::cout << "Success: " << hr2 << std::endl;
            }
        }
        else {
            std::cout << "Fail CoInit: " << std::endl;
        }
    }
    catch (_com_error& e)
    {
        std::cout << "COM ERROR catched " << std::endl;
        std::cout << "Code = %08lx\n" << e.Error() << std::endl;
        std::cout << "Meaning = %s\n" << e.ErrorMessage() << std::endl;
        std::cout << "Source = %s\n" << (LPCSTR)e.Source() << std::endl;
        std::cout << "Description = %s\n" << (LPCSTR)e.Description() << std::endl;

    }
    CoUninitialize();
}

我仍然有此错误:

  

myApp.exe中的异常引发到0x00B20768:0xC000000005:访问   在位置0x00B20768处执行时发生冲突。

编辑:

'''

    #include <iostream>
    #import "libcom.ocx"

    using namespace LIBCOM;

    int main()
    {
        CoInitialize(NULL);

        IMachinePtr machineCUPtr(__uuidof(Machine)); //Same error
        machineCUPtr->MyMethod(parameters of the method);

        CoUninitialize();

        return 0;
    }

''''

0 个答案:

没有答案