Как можно использовать бесплатный COM-объект без регистрации, не копируя dll в тот же каталог, что и исполняемый файл? Возможно ли это?
Я хотел бы получить полный рабочий образец или подробное пошаговое руководство для моего точного сценария.
Например, у меня есть следующие компоненты:
CppTestRunner.exe - консольное приложение vc ++
CppTests.dll - vc ++ mfc dll
CsCOMServer.dll - c # COM видимый dll
Я не хочу изменять исполняемый файл или его каталог, например добавлять внешний манифест.
CppTests.dll находится в другом каталоге, чем exe.
Это нормально, если CsCOMServer.dll находится в том же каталоге, что и CppTests.dll.
CppTestRunner.exe вызывает LoadLibrary на CppTests.dll, который работает нормально.
После встраивания манифестов и использования apis контекста активации Windows я смог скопировать CsCOMServer.dll в каталог exe, чтобы убедиться, что CppTests.dll может создать экземпляр CsCOMServer.dll без проблем, но снова я пытаюсь избегайте этого шага.
В настоящее время, когда CsCOMServer.dll находится в том же каталоге, что и CppTests.dll, и без CsCOMServer.dll в каталоге exe, я получаю следующую ошибку при вызове CoCreateInstance:
Ошибка = 0x80070002 Системе не удается найти указанный файл.
Я использовал монитор процессов sysinternals для отслеживания путей, которые просматривает CppTestRunner.exe и т. Д.
Я замечаю, что в зависимости от того, что я пытаюсь сделать, иногда CppTestRunner.exe пытается прочитать CsCOMServer.dll.config в том же каталоге, что и CppTests.dll, но независимо от того, что я пытаюсь вставить туда, я не смог получить мимо ошибки.
Также в зависимости от других вещей, которые я пытаюсь сделать, CppTestRunner.exe пытается прочитать CsCOMServer.dll в том же каталоге, что и CppTests.dll, но по какой-то причине я все еще получаю ту же ошибку.
Кто-нибудь знает рабочий код с таким точным сценарием?
Как вы, вероятно, можете сказать, это часть некоторых юнит \ интеграционных тестов.
В качестве простого обходного пути в настоящее время я копирую CppTestRunner.exe в тот же каталог, что и CppTests.dll, и запускаю его оттуда, но хотел бы избежать этого шага.
Спасибо.