是否可以从 C# 程序中使用 C++ .lib 文件
Is it possible to use a C++ .lib file from within a C# program?
是否可以在 C# 程序中使用 C++ .lib 文件?
有很多方法。阅读有关 MSDN 中的"互操作"的信息。
一种方法是将库公开为 DLL,然后使用 pinvoke 从 C# 项目调用这些函数。不过,这限制了你使用 C 风格的界面。
如果您的接口更复杂(例如面向对象),则可以创建一个 C++/CLI 层,该层将向 C# 程序公开库的类结构。这意味着您必须创建一个托管C++(或现在称为 C++/CLI)项目;然后在托管代码中设计一个接口,该接口将通过调用本机C++(即您的库)来实现。
执行此操作的另一种方法是使用 COM 接口包装您的库。但是COM很痛苦,所以我不会...
不是直接的。 可以创建使用库的 C++/CLI 程序集,然后从 C# 访问该程序集,也可以将库包装为 DLL。
的是围绕您正在使用的本机 C/C++ 库的托管包装器 (C++/CLI)。
如果您正在寻找任何C++/CLI书籍,我会推荐Nishant Sivakumar的C++/CLI in Action。
已经回答要包装它,但这里有一个例子. 祝你好运!
我会看看 swig,我们在项目中使用它来向其他语言平台公开我们的 C++ API。
这是一个维护良好的项目,可以有效地围绕C++库构建一个精简包装器,允许 C# 等语言直接与本机代码通信 - 省去了必须实现(和调试)粘合代码的麻烦。
No. 只能使用 C# 程序中的完整.dll。
这取决于,你对这种情况有什么限制吗?
如果你有一个lib文件,应该可以先把它编译成DLL文件,其次在DLL接口中公开你想要调用的函数,第三,使用C#本机方法调用它们(看看 pinvoke.net 如何做到这一点)。
使用库,但就像其他人说的那样,如果你把它包装成一个DLL,你可以使用它。
swig 可以获取 .lib 的标头,如果它们不是太复杂,它可以为你生成 DLL,然后你可以使用 C# 的 pinvoke 调用它,这也将由 swig 生成。
如果您的库很复杂,并且到处都有引用计数的智能指针,您应该找到替代方案。
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- JSON转换为nlohmann JSON-lib中的结构数组
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 使用 VS2015 在 Windows 10 上构建 Fortran .lib x64 位并将其链接到 C++
- 为什么我的链接器在找到Coin4d.lib后搜索Coin4sd.lib?
- libcpmtd.lib有什么用?
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 解析引用 |exe/dll vs lib
- 在 /usr/local/lib 下找不到库
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- VS2015 未链接用户32.lib
- 从 .lib 文件创建一个.dll文件
- 看不到文件'SDL2.lib'
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 可执行文件C++包括.obj,.lib和.dll吗?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 无法在 DLL 中链接 SDL2-static.lib
- 对使用 CMake 生成为 lib .a 的方法的未定义引用