【发布时间】:2019-02-08 17:46:02
【问题描述】:
我的目标是将现有的 C++ 类(遗留代码,存储在一组 *.h 文件中)编译成 DLL,以便进一步集成到 C# 应用程序中。
为此,最好使用 MS Visual Studio。我对这种环境没有经验,所以我尝试了 MSDN 和其他 SO 答案上的幼稚方法:
- 文件 |新 |从现有代码项目
- 选定的 Visual C++
- 选定的文件位置是包含在这些
.h文件中使用的引用的基础 - 指定项目名称
- 让向导查找并添加目录下的所有 C++ 文件
- 选择“使用 Visual Studio”进行构建,项目类型为“动态链接库 (DLL) 项目”
- 未选中以下任何复选框(ATL、MFC、CLR)
- 在调试设置的“包括搜索路径 (/I)”中指定
.目录 - 在“发布设置”中选中“与调试配置相同”
- 点击完成按钮
这会在目录中创建几个 VS 文件:
mylibrary.sln
mylibrary.vcxproj
mylibrary.vcxproj.filters
mylibrary.vcxproj.user
以这种方式创建的项目,我按F6 或选择Build | Rebuild solution 来自菜单。
然后我希望构建在某处生成.dll 文件,但它没有出现。只显示这些文件:
.vs/mylibrary/v15/.suo
.vs/mylibrary/v15/Browse.VC.db
.vs/mylibrary/v15/Browse.VC.opendb
.vs/mylibrary/v15/ipch/AutoPCH/efad7c74cd39331b/EXAMPLE.ipch
Debug/mylibrary.log
Debug/mylibrary.tlog/mylibrary.lastbuildstate
接下来,我决定尝试创建一个全新的库项目,只是为了观察差异以获得一些提示,但这并没有帮助 - 差异太多,即使在文件结构中也是如此......
我的问题是:
- 我选择的 MS Visual C++ 是否适合特定用途?
- 如果是这样,我在这里做错了什么?
【问题讨论】:
-
您不会将.h 文件编译到库中。而且您不能直接使用 C# 中的 C++ 代码。您应该(如果有的话)研究如何使用 C++/CLI。
-
你的意思是后缀对 MS Visual C++ 很重要吗?我可以尝试将代码拆分为
.cc和.h,但我只是希望这不是必需的 -
是的,但是您需要在某些内容中#include 这些标头,以便 VS 生成可执行文件/库 - VS 不直接编译 .h 文件。如果它在你不这样做的情况下在 Linux 上运行,那么你在 Linux 上的项目设计也是错误的。
-
使本机代码可用于 .NET 的规范解决方案是包装功能并公开 .NET 接口。标准工具是 C++/CLI。虽然使用起来相当简单,但您必须了解细节。 C++/CLI in Action 是一个有用的指南。
-
将代码编译到非托管库中不会更接近该目标。相反,创建一个混合模式程序集,它可以包含非托管的本机代码以及 .NET 可使用的接口。
标签: c++ visual-c++ dll