链接到混合模式dll中的presentationcore.dll



我们有一个用C++编写的混合模式DLL,它封装本机C++DLL并公开托管类。在公开的托管类中,我们使用Vector3D等类型的方法参数,它们是PresentationCore.DLL的一部分

因此,混合模式C++代码需要引用PresentationCore.DLL。我们通过来实现这一点

#using <PresentationCore.dll>

这需要项目的搜索路径包括PresentationCore.dll所在的文件夹。

这很糟糕,因为这些文件夹在不同的机器上会有所不同,而且我们的项目需要在几台机器上进行编译而不进行更改。目前,我们已经通过在代码库中包含PresentationCore.dll的副本来解决这个问题,这显然不是一个好的解决方案。

我非常感谢您提出的建议,我们可以绕过指定一个DLL的显式路径,该路径应该可以通过GAC完全访问。

不要执行#using <PresentationCore.dll>。您需要右键单击项目,转到References...,单击Add New Reference...,然后从.Net选项卡中选择PresentationCore

http://msdn.microsoft.com/en-us/library/aa970266.aspx

Phew我让它工作起来了。我有一个本地项目,我也有同样的问题,我需要使用PresentationCore中的HwndSource来对hwnds进行一些分析。我所做的是将我的项目保留为本机(无/clr开关),然后对于具有使用HwndSource的函数的源文件,我添加了/clr切换,这样我就可以包含其他源的设置,如异常处理等。

#using <System.dll>
#using <WindowsBase.dll>
#using <PresentationFramework.dll>
#using <PresentationCore.dll>
#using <UIAutomationProvider.dll>
#using <UIAutomationTypes.dll>

这工作得很好,你将不会得到任何Intellisense支持。输出中的一些警告,如果你能接受的话,这是给你的。

GAC位于%windir%\Assembly\子目录GAC_32或GAC_64 中

在这种情况下,我会使用象征性的链接。在本地目录中创建指向DLL的链接。然后从该链接进行编译。

是的,你必须为每台机器更换它。但你所要做的只是一行批处理脚本

考虑一下这个在我的机器上运行。

C:temp>for /f "tokens=*" %f in ('dir windowsassemblypresentationcore.dll  /s/b') do @echo %f
C:windowsassemblyGAC_32PresentationCore3.0.0.0__31bf3856ad364e35PresentationCore.dll
C:windowsassemblyGAC_64PresentationCore3.0.0.0__31bf3856ad364e35PresentationCore.dll

选择你需要的一个(比如GAC_64),并设置一个链接到它——这就是你应该需要的。

@for /f "tokens=*" %f in ('dir windowsassemblypresentationcore.dll  /s/b') do @echo %f | @findstr GAC_64 | mklink .presentationCore.dll "%f"

相关内容

  • 没有找到相关文章

最新更新