Я использую сторонний компонент в своем приложении, который распространяется либо как COM-компонент, либо может ссылаться на файл .manifest. В любом случае он загружается с использованием CoCreateInstance(). Файлы, необходимые для стороннего компонента, находятся во вложенной папке. Разработчик компонента сказал мне включить файл .manifest в настройках Visual Studio 2010 (в разделе «Манифест») исполняемого файла, а загрузка компонента работает без проблем.Переместить файл манифеста в dll?
Теперь я использую сторонний компонент только из DLL, чтобы инкапсулировать функции, используемые из стороннего компонента. Я загружаю DLL динамически, используя LoadLibrary(). Использование компонента по-прежнему работает, я могу использовать компонент из DLL, который загружается EXE с файлом манифеста.
Чтобы отделить EXE от третьего компонента pary, я также хотел бы переместить манифест в DLL, где это единственное место, где используется компонент. Таким образом, каждый новый EXE, который я хотел бы написать, может использовать DLL и косвенно использовать функции. На данный момент я должен добавить mainfest в каждый новый EXE, но я не хочу этого делать.
Есть ли способ переместить манифест, используемый EXE, в DLL?
Вы можете поместить манифест в DLL, но она не будет активирована автоматически. Вам нужно будет сделать это вручную, используя API контекста активации. –
Немного бессмысленно заставлять нас угадывать, что содержит манифест. Но высокие шансы, что вы пытаетесь поставить лошадь после тележки, DLL можно найти только в том случае, если EXE знает, где ее искать. Для этого требуется, чтобы записи манифеста присутствовали в EXE. Если вы поместите его в DLL, EXE не сможет найти DLL, так что вы не сможете найти манифест. –
EXE загружает DLL динамически, я должен был упомянуть об этом. Загрузка DLL работает, но вызов CoCreateInstance() внутри DLL завершается с ошибкой. – vividos