从C#访问C++.lib库
Accessing a C++ .lib library from c#
我有一个c++库文件(.lib(。如何从c#访问其中的函数?我已经读到,我可以将库文件包装在一个c++dll中,并以这种方式公开函数。这是唯一的办法吗?我不是代码的所有者,所以我的选择是有限的。
使用C++/CLI程序集包装C++库。
C++/CLI允许您混合使用托管代码和非托管代码,充当C#和本机C++之间的桥梁。它实际上非常简单,也相对容易做到,尽管如果有很多类/函数要包装,它可能会变得乏味。
这里有一个例子。
您不能直接访问c++库文件(.lib(。最好的方法是在非托管代码周围使用非托管包装器。参考DllImportAttribute
。
MSDN帮助文档中有一个很好的例子:
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
另请注意:您可以在c++库周围使用托管c++包装器,但最好用非托管c++代码编写包装器。
相关文章:
- 如何指定我希望我的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 的方法的未定义引用