1

首先,我对 C++ 的了解有限,而且我是 pinvoke 的新手。

我有一个库,其中包含一些非常旧的代码,我们想与 C# 一起使用,但当然是旧的,它是在未管理的 C++ 中。我正在寻找为 lib 制作一个 C# dll 包装器。所以将来任何想要使用代码的人都可以使用 dll。但是我可以找到如何导出函数来执行 pinvoke。我尝试了垃圾箱,但没有看到任何东西。还是我只需要从代码中获取功能?下面是垃圾箱。

在此处输入图像描述

4

3 回答 3

2

你需要做什么取决于它是什么类型的库。

  1. 如果它是一个静态库,那么您需要构建一个 DLL 并将 .lib 文件链接到该 DLL。然后您的 C# 代码可以 p/invoke 到您构建的 DLL。
  2. 如果它是 DLL 的导入库,那么您只需直接 p/invoke 到 DLL。.lib 文件在这里对您没有用处。
于 2012-09-06T11:16:59.940 回答
1

在这里小心。我一直在做类似的事情,但对于 Java。

如果您的 C# 代码在 64 位上运行,那么您的 32 位库将无法加载。最好的选择是如果你能掌握源代码并构建 2 个新版本,一个 32 位和 1 个 64 库。

如果您无权访问源代码,一种解决方法是创建一个 32 位可执行文件,该可执行文件调用您的 lib 并且可以作为命令行进程调用(将其输出保留在磁盘文件中)。在这种情况下,您可以使用 64 位系统中的 32 位代码。启动一个新进程等当然会受到惩罚,但取决于它被调用的频率,这可能是可以接受的。

于 2012-09-06T11:27:51.433 回答
0

“Interop 101”应该对您有所帮助:第 2 部分使用 P/Invoke 在 C# 中调用非托管 C++ 方法,第 4 部分使用 C++/CLI 桥。

于 2012-09-06T11:18:26.307 回答