delphi – 免注册COMDLL?

delphi – 免注册COMDLL?,第1张

概述我的程序使用Skype4COM.dll(Skype API的包装器)。 我使用Delphi 2010 – 有没有办法确保我的程序总是使用Skype4COM.dll,我会运送它?事情是,有不同版本的Skype4COM,如果我注册我的超过某人elses,他们的应用程序可能不再工作了。 通常我使用RegSvr32在人系统上注册DLL,但我听说它可以使它免注册(在C#中),所以我的问题是:我们能在Delp 我的程序使用Skype4COM.dll(Skype API的包装器)。

我使用Delphi 2010 – 有没有办法确保我的程序总是使用Skype4COM.dll,我会运送它?事情是,有不同版本的Skype4COM,如果我注册我的超过某人elses,他们的应用程序可能不再工作了。

通常我使用RegSvr32在人系统上注册DLL,但我听说它可以使它免注册(在C#中),所以我的问题是:我们能在Delphi中这样做吗?

谢谢!

解决方法 在你甚至触摸注册免费com确保您的应用程序工作,当dll注册。一旦你对此感到满意。是时候尝试,让它工作免费注册。第一步是取消注册你的dll。如果你现在尝试并运行你的程序,你应该得到ClassID找不到。

第一步是为您的应用程序创建清单文件。清单文件是一个xml文件,其中可以为您的应用程序设置依赖关系。你可能不知道,但自从有关Delphi 2007,如果你启用了主题,你的应用程序已经有一个清单。这里是德尔福2010:

<?xml version="1.0" enCoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <assemblyIDentity    type="win32"    name="CodeGear RAD Studio"    version="14.0.3615.26342"     processorArchitecture="*"/>  <dependency>    <dependentAssembly>      <assemblyIDentity        type="win32"        name="Microsoft.windows.Common-Controls"        version="6.0.0.0"        publicKeyToken="6595b64144ccf1df"        language="*"        processorArchitecture="*"/>    </dependentAssembly>  </dependency>  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">    <security>      <requestedPrivileges>        <requestedExecutionLevel          level="asInvoker"          uiAccess="false"/>        </requestedPrivileges>    </security>  </trustInfo></assembly>

现在我不知道你是否可以添加到这个,你每个应用程序只能有一个清单文件,我通常只是完全替换它。因为我想要的主题启用我开始与这个文件,并添加我的依赖。在你的情况下,你需要添加一个依赖关系skype4com.dll这里是我需要添加:

<assemblyIDentity   name="Skype4COM.X"   version="1.0.36.0"   type="win32"   processorArchitecture="x86"></assemblyIDentity>

注意我实际上添加了一个依赖项到Assembly Skye4COM.X而不是dll本身。不要混淆2,虽然一个dll可以是一个程序集一个程序集不一定是dll。这将变得清楚当我们设置装配清单/

您的清单文件现在变为:

<?xml version="1.0" enCoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <assemblyIDentity    type="win32"    name="CodeGear RAD Studio"    version="14.0.3615.26342"     processorArchitecture="*"/>  <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="Skype4COM.X"         version="1.0.36.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>

使用与可执行文件相同的名称保存此文件,但使用.manifest后缀。例如SkypeClIEnt.exe.manifest

下一步是在您的应用程序中嵌入此清单。您需要使用以下文本创建资源文件(rc文件):

#define RT_MANIFEST 24 #define APP_MANIFEST 1APP_MANIFEST RT_MANIFEST SkypeClIEnt.exe.manifest

将此文件添加到您的应用程序并构建。如果你仍然有主题启用,你会得到一个重复的资源警告,只是从你的dpr文件中删除{$ R * .res}。您还应该在项目文件中看到这一点:

{$R 'SkypeClIEnt.manifest.res' 'SkypeClIEnt.manifest.rc'}

如果您现在尝试并运行应用程序,您将收到以下错误消息:

Unable to create process: The@H_403_40@ application has Failed to start@H_403_40@ because its sIDe-by-sIDe configuration@H_403_40@ is incorrect. Please see the@H_403_40@ application event log or use the@H_403_40@ command-line sxstrace.exe tool for@H_403_40@ more detail.

我们现在需要为程序集添加清单(Skype4COM.X)。创建一个名为Skype4COM.X.manifest的文件。我们需要在清单文件中描述程序集:

<?xml version="1.0" enCoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <assemblyIDentity     name="Skype4COM.X"     version="1.0.36.0"     type="win32"    processorArchitecture="x86">  </assemblyIDentity>  <file name="Skype4COM.dll">    <typelib      tlbID="{03282B5D-B38F-469D-849A-09B0A7F4881B}"      version="1.0"      helpdir=""      flags="hasdiskimage"/>  </file></assembly>

现在将应用程序的dll和程序集清单放在同一个文件夹中并运行!

如果你再遇到错误,你需要使用SxSTrace来调试。这在Vista以上可用。首先启动跟踪:

SxSTrace trace -logfile:sxsTrace.etl

运行你的程序,然后按回车键在轨迹上完成它。现在解析跟踪:

SxSTrace parse -logfile:SxSTrace.etl -outfile:SxStrace.txt

您应该在SxSTrace.txt中有一个完整的整个过程的日志

总结

以上是内存溢出为你收集整理的delphi – 免注册COM/DLL?全部内容,希望文章能够帮你解决delphi – 免注册COM/DLL?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1281654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存