从现有源创建 MS Visual C++ DLL 项目
Create MS Visual C++ DLL project out of existing sources
我的目标是将现有的C++类(存储在一组*.h
文件中的遗留代码(编译为 DLL,以便可以进一步集成到 C# 应用程序中。
为此,似乎最好使用MS Visual Studio。我对这种环境没有经验,所以我尝试了在 MSDN 和其他 SO 答案上找到的天真方法:
- 文件 |新品 |从现有代码进行项目
- 选定的视觉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++是否适合给定目的?
- 如果是这样,我在这里做错了什么?
我认为您的步骤可能是正确的,我认为这是使用 C# 应用程序中代码的正确方法。您绝对可以通过导入方法从 C# 调用C++库。
您错过了仅从库中导出要使用的方法。 尝试将__declspec(DLL导出(与这些方法一起使用。 请查看此链接:
https://msdn.microsoft.com/en-us/library/a90k134d.aspx。
此外,输出应位于构建文件夹,而不是源代码文件夹
将.h
文件编译到库中是可以的,编译器不在乎 - 但是,UI 会。 不过,您可以通过直接编辑.vcxproj
文件来调整这一点。
执行此操作时,请确保<ClCompile>
部分包含:
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
请注意,可以使用命令行生成 DLL 项目:
"%ProgramFiles(x86)%Microsoft Visual Studio2017CommunityMSBuild15.0BinMSBuild.exe" -target:Clean,Build
(这假设您当前的目录是带有.vcxproj
的目录(
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual C++ constexpr Hints
- 为什么它不适用于Visual 2019的原因
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- visual在c++中将十进制数转换为二进制数
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual C++(VS2017)中用户定义的转换不明确
- Visual C++GC接口如何启用它以及要包含哪个库
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- visual c++,如何获取解决方案目录中的代码
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头