Регистрация бесплатно com delphi
Так что у меня есть DLL, которую я хочу использовать с ком. Это было сделано в C#, и я хочу использовать DLL в Delphi. Мой пользователь настолько ограничен, что регистрация DLL может быть реальной болью. И мне сказали, что что-то вроде регистрации бесплатных ком-выходов, поэтому я попробовал вот что я сделал:
Создайте файл манифеста для моего exe в delphi с этим внутри:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="Calc.X"
version="1.0.0.0"
type="win32"
processorArchitecture="x86">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Я добавил этот манифест в Project> options> application> manifest> custom>, указав путь к моему файлу.
Мой C# dll называется Calc.dll (это просто тестовая dll примера калькулятора).
Затем я добавил rc-файл в свой проект delphi, щелкнув правой кнопкой мыши на exe (в идеале) Add > rc с этим внутри:
#define RT_MANIFEST 24
#define APP_MANIFEST 1
APP_MANIFEST RT_MANIFEST Project2.exe.manifest
Я назвал файл манифеста моего проекта: Project2.exe.manifest
Затем я создал манифест для моей DLL
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Calc.X"
version="1.0.0.0"
type="win32"
processorArchitecture="x86">
</assemblyIdentity>
<file name="Calc.dll">
<comClass
progid="Calculator"
clsid="{96D7B70E-A084-4EE5-9FDE-AEEDB0C61B9B}"
threadingModel="Apartment">
</comClass>
</file>
</assembly>
Называется это Calc.X.manifest.
Я использовал sxsTrace, чтобы исправить проблему, которая у меня была (ошибка сравнения бок о бок или что-то в этом роде, в основном версии не совпадали, и не запускался exe, но теперь это исправлено).
Тогда незарегистрированный мой dll (я зарегистрировался прежде всего, чтобы проверить, работает ли он). И запустил exe, но теперь я получаю сообщение, что класс не зарегистрирован. Он дает мне ключ GUID, и я убедился, что он такой же, как в моем манифесте.
Это сейчас, где я нахожусь. Я не могу заставить мое приложение использовать DLL, определенную в манифесте.
РЕДАКТИРОВАТЬ
Я добавил это в манифест:
<comClass
progid="Calculator"
clsid="{96D7B70E-A084-4EE5-9FDE-AEEDB0C61B9B}"
threadingModel="Apartment">
</comClass>
Это мой класс в C# dll. Я также попытался определить интерфейс (ICalculator) таким же образом. И теперь я получаю еще одно сообщение в моем приложении Delphi:
EOleSysError: Ошибка в DLL, ClassID: {96D7B70E-A084-4EE5-9FDE-AEEDB0C61B9B}