У меня есть сборка в .NET
, которую я выставил через COM
и сильно назван.Необработанное исключение при попытке загрузить COM-обернутую DLL в C++
После развертывания эта сборка должна присутствовать в GAC
. Тем не менее, мне нужно проверить, существует ли он до создания его объекта.
К сожалению, даже при создании объекта в результате попытки/улавливания получается unhandled exception
во время выполнения, если сборка отсутствует в GAC.
Так что для меня должен быть какой-то способ проверить, действительно ли DLL установлена в GAC, прежде чем я начну создавать объект.
HINSTANCE histLib;
histLib = LoadLibrary("CLSInterOpLibrary.dll");
if (histLib == NULL)
return false;
encode();
CoInitialize(NULL);
try
{
CLSInterOpLibrary::CLSInterOpInterfacePtr p(__uuidof(CLSInterOpLibrary::CLSInterOpClass));
if (p == nullptr)
return false;
com_ptr = p;
}
catch (exception &e)
{
}
LoadLibrary
дает NULL, независимо от того, присутствуют ли в GAC или нет в библиотеке, вероятно, нуждается в каком-то пути ... и
CLSInterOpLibrary::CLSInterOpInterfacePtr p(__uuidof(CLSInterOpLibrary::CLSInterOpClass));
..gives необработанного исключения, если DLL нет.
Как можно проверить, установлен ли DLL
в GAC
с C++?
Или есть более элегантное решение?
http://stackoverflow.com/questions/14031749/where-is-loadlibrary-a-looking-for-the-file –
Даже если я выберу библиотеку и поместил ее в каталог проекта, «LoadLibrary» преуспеет , но создание COM-объекта происходит с ошибкой, так как «CLASS NOT REGISTERED» и генерирует необработанное исключение. – user1173240
http://www.codeproject.com/Articles/12673/Calling-Managed-NET-C-COM-Objects-from-Unmanaged-C –