所以我有一个要与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}