免费注册com delphi

时间:2018-07-18 08:53:27

标签: delphi com delphi-10.1-berlin registration-free-com

所以我有一个要与com一起使用的dll。它是用C#制成的,我想在Delphi中使用dll。我的用户受到限制,以至于注册dll可能真是麻烦。有人告诉我类似免费注册的com存在,所以我尝试了这样做:

使用以下内容在delphi中为我的exe创建清单文件:

<ListView x:Name="listView">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem" BasedOn="{StaticResource YourOtherStyleInTheResourceDictionary}">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

我在“项目”>“选项”>“应用程序”>“清单”>“自定义”中添加了此清单。

我的c#dll称为Calc.dll(这是计算器示例的测试dll)。

然后,我在delphi项目中添加了一个rc文件,右键单击exe(在ide中),然后在其中添加rc:

<?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>

我将项目的清单文件称为:Project2.exe.manifest

然后我为自己的dll创建了清单

#define RT_MANIFEST 24 
#define APP_MANIFEST 1

APP_MANIFEST RT_MANIFEST Project2.exe.manifest

称为Calc.X.manifest。

我使用sxsTrace修复了我遇到的问题(并排比较错误或类似问题,基本上版本不匹配,并且无法启动exe,但现在已修复)。

然后取消注册我的dll(我首先注册以测试它是否有效)。并启动了exe文件,但现在我收到该类未注册的消息。它为我提供了GUID密钥,并且确保它与清单中的密钥相同。

这就是我现在的位置。我无法使我的应用使用清单中定义的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>

这是我在c#dll中的类。我也尝试以相同的方式定义接口(ICalculator)。现在我在delphi应用程序中收到另一条消息:

EOleSysError:DLL中的错误,类ID:{96D7B70E-A084-4EE5-9FDE-AEEDB0C61B9B}

0 个答案:

没有答案