Я пытаюсь получить бесплатный доступ к COM-интерфейсу между 64-битной COM-dll и приложением C# для работы.Регистрация без прерывания между 64-битной COM-dll и C# /. Net-приложением
In the answers to a previous question of mine, я получил помощь, которая позволила мне успешно вызвать метод HelloWorld на 64-битной COM-dll для C#.
Однако это было возможно только путем регистрации COM-dll глобально с помощью regsrv32.exe.
Based on this answer связанный с этим вопрос, я думаю, что мне нужно установить флажок Изолировать ссылку dll COM на true. Однако, это приводит к следующей ошибке сборки:
Problem isolating COM reference 'ComLibInteropLib':
No registered classes were detected for this component.
The answer to a question on MSDN social, кажется, указывает, что существует решение этой проблемы, если можно собрать 32-битную версию DLL с.
Однако, моя библиотека взаимодействия COM должна ссылаться на «нормальную» C++ dll, для которой у меня нет источника, и доступен только в качестве x64.
Итак, мой вопрос: как я могу включить изолированный флаг (или иным образом работать бок о бок) между 64-битной COM-dll и приложением C#?
Я с удовольствием использую regsrv32.exe на машине или другой машине разработчика, но мы не можем регистрировать любые DLL-файлы COM на производственных станциях, где должно выполняться окончательное приложение.
Да, я уверен, что проблема в том, что вы упомянули в своем третьем абзаце. Я не могу построить обе версии, поскольку цель заключается в том, что моя COM-библиотека будет использовать другую (plain C++) dll, которая у меня есть только как 64-битная двоичная. – Wilbert
Вам нужно только зарегистрировать его, он не должен быть запущен. Если вы хотите узнать, что должен выглядеть манифест, тогда просто практикуйте с помощью простого COM-сервера. Вы увидите необходимые записи манифеста, вам просто нужно обновить имена и GUID. Примечательно, что сбор COM для взаимодействия с внутренним кодом становится убыточным предложением, если вам приходится иметь дело с такими драконовскими ограничениями на установку. Использование обертки C++/CLI - лучший способ. –
У нас есть рабочая оболочка C++/Cli, но она выходит из строя из-за локальной статистики, см. [Эта ошибка подключения с WONTFIX] (https://connect.microsoft.com/VisualStudio/feedback/details/336844/static-variable-in -native-метод-причины-исключения-c0020001-во-процесс-выход).Мы надеемся, что использование COM позволит избежать этой проблемы. У нас также были различные другие проблемы с C++/Cli, см. Свой комментарий [здесь] (http://stackoverflow.com/a/19513833/1591992) :) – Wilbert