【发布时间】:2014-05-04 01:46:15
【问题描述】:
我编写了一个 Win32-DLL(在 VS 2010/13 中支持 clr,c++)作为另一个/旧 VB6 应用程序的扩展,并使用 opensource-dll PDFSharp。
它工作正常,但是如果从目录中删除“PDFSharp.dll”,如果程序尝试加载我的 dll,应用程序就会崩溃。 我想将 Sharp DLL 包含到我的 DLL 中,因此只需要一个 DLL。 我尝试将其添加到资源中,并在运行时通过
加载/捕获错误AppDomain^ root = AppDomain::CurrentDomain;
root->CurrentDomain->AssemblyResolve += gcnew ResolveEventHandler(MyResolveEventHandler);
在应用程序调用的第一个函数中,但我的问题是,应用程序/dll 在我处理某些事情之前就崩溃了。
ILMerge 无能为力,因为它是 Win32/net(clr) DLL 而不是 100% NET-DLL。
【问题讨论】:
-
C# 引用混合模式 DLL,还是混合模式 DLL 引用 C# 程序集?您可以使用 C# 编译器生成
.netmodule,C++/CLI link.exe 会很高兴地将其与混合模式 C++/CLI 代码合并。 -
嗨,你的回答。有没有创建 .netmodule 文件的好方法?每个 .cs 文件(超过 50 个)的 csc.exe /t:module 有点长,但我在 vs (c#) 中找不到特殊的编译器选项
-
一些研究表明,Visual Studio 构建系统 MSBUILD 支持构建 .netmodule 文件。但是没有 UI 来配置它,您必须在文本编辑器中编辑 .vcxproj 并将
<OutputType>设置更改为module。 -
非常感谢,效果很好!创建.netmodule,然后将“#using
”添加到cpp项目,删除对PDFSharp.dll的引用并在c++命令行中添加“/link PDFSharp.netmodule /LTCG”! -
好的,我会写一个答案来解释这种方法。