Регистрация бесплатно 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}

0 ответов

Другие вопросы по тегам