Нарушение прав доступа при выполнении функции CreateInstance - PullRequest
0 голосов
/ 05 июля 2019

Я устанавливаю программу для создания COM-соединения из файла OCX.

Я использую Visual Studio 2019 с отладкой x86.Он правильно генерирует файлы .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();
}

У меня все еще есть эта ошибка:

Исключение увеличено до 0x00B20768 в myApp.exe: 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;
    }

''''
...