【发布时间】:2018-10-01 13:45:17
【问题描述】:
在我问我的问题之前,这里有一些关于我的开发环境的信息:
操作系统:Windows 64 位
IDE:Visual Studio 2013
我想通过 C# 项目控制设备。我从设备制造商那里得到的:一个 .h 文件和一个静态库(.lib 文件)。在 C++-Console-Application 中,控制工作正常。 但是现在我在为 C# 构建 DLL 时遇到了一些问题
为了构建这样的 .dll 文件,我创建了一个空的 C++ DLL 控制台应用程序,将 .h 文件复制到项目中并将 .lib 文件引用到链接器(添加了“附加库方向”和解决方案设置中的“附加依赖项”)。
但是到了这一步,问题就出现了。当我构建项目时,控制台打印
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
日志文件没有显示任何错误,但调试(或发布)文件夹中没有 DLL 文件。
我尝试了什么:我添加了一个“假”.cpp 文件,我在其中实现了 .h 文件中的一个功能 -> 构建了 dll。所以我猜Visual Studio不能识别.lib文件。
下一步是使用 DllImport 命令编写 C#“包装器”。
提前感谢您的所有回答和提示。
【问题讨论】:
-
这可能会有所帮助。如果我的理解是正确的。 stackoverflow.com/questions/772041/using-c-library-in-c-sharp
-
遗憾的是没有。我的问题在于构建 dll,而不是使用它。这将是我在问题中提到的下一步。
-
查看正确的文件夹,与 C# 不同,C++ 项目构建到解决方案文件夹,而不是项目文件夹。但可以肯定的是,静态库对于 DLL 来说并不是一个好的开始。您需要一个明确列出需要导出的特定函数的 .def 文件。另外请记住,您不能调用任何 C++ 类实例方法或任何使用 C++ 模板类型(如 std::string)的函数,这需要用 C++/CLI 编写的包装器。
-
没有“C++ DLL Console-Application”这样的东西。它必须是一个 dll 项目。
-
@HansPassant 谢谢,但这不是问题所在。我正在将
__declspec(dllexport)标签添加到我的函数中。所以我不需要 .def 文件,对吗?而且我不想导出使用 std::string 或类似内容的类实例方法或函数。 @RobertAndrzejuk 新项目 -> Visual C++ -> Win32 控制台应用程序 -> 应用程序类型:DLL。希望这有助于理解。
标签: c# c++ visual-studio