У меня есть третья часть DLL, написанная на Visual Basic, которую я пытаюсь использовать из C ++. У меня нет исходных и заголовочных файлов, а есть документация о том, какие у него классы и методы, включая их сигнатуру.
Я нашел несколько статей о том, что я не мог использовать эту DLL напрямую, потому что она была написана в Visual Basic, которая управляется, и я должен использовать ее через COM
Регистрация DLL: regasm / codebase /tlb:ThirdPartyDll.tlb ThirdPartyDll.dll
Импортируем его: #import «../Debug/ThirdPartyDll.tlb»
Инициализация COM: CoInitialize (NULL);
Создание объекта: ThirdPartyClassPtr ptrThirdPartyClass (_uuidof (ThirdPartyDll :: ThirdPartyClass));
Вызов метода объекта: ptrThirdPartyClass-> ThirdPartyClassMethod ();
У меня следующие 2 проблемы
О. DLL была успешно зарегистрирована на шаге 1 с предупреждениями, такими как следующее, которое я проигнорировал, потому что они упоминали классы, которые мне не нужны.
Обработка предупреждений экспортера библиотеки типов ThirdPartyDll.AnotherClassThatIDontUse, ThirdPartyDll. Предупреждение: экспортер библиотеки типов обнаружил тип, производный от универсального класса и не помеченный как [ClassInterface (ClassInterfaceType.None)]. Интерфейсы классов не могут быть выставлены для таких типов. Попробуйте пометить тип с помощью [ClassInterface (ClassInterfaceType.None)] и предоставить явный интерфейс в качестве интерфейса по умолчанию для COM с помощью атрибута ComDefaultInterface.
Б. Ни один из методов, доступных в классе ThirdPartyClassPtr, не виден в коде C ++. Единственные методы, которые могут быть вызваны, являются следующими, и они не были определены ThirdPartyClass, но каким-то другим способом (вероятно, компилятором, когда он обрабатывал команду import).
Есть идеи, что может быть не так?
Если это VB.NET Dll, чтобы узнать, как он работает, я бы начал с написания фиктивного проекта (C #, VB, что вы предпочитаете) с использованием dll, затем вы увидите методы, свойства и т. Д., А затем вы должен быть в состоянии перевести это
Других решений пока нет …