2012-09-06 76 views
1

首先,我对C++的了解有限,我也是新手来进行拼写。从函数库中获取函数

我有一些很老的代码中有一个图书馆,我们想用C#,但当然是老它在unmanged C++使用。我期待为lib创建一个C#dll包装器。所以将来任何想使用代码的人都可以使用dll。不过,我可以找到如何导出函数做一个pinvoke。我尝试过dumpbin,但没有看到任何。或者我只需要从代码中获取功能?下面是dumpbin。

enter image description here

回答

2

你需要做什么取决于它是什么样的图书馆。

  1. 如果它是一个静态库,那么您将需要构建一个DLL并将.lib文件链接到该DLL。然后你的C#代码可以调用你建立的DLL。
  2. 如果它是一个DLL的导入库,那么你只需直接调用DLL即可。 .lib文件在这里没有用处。
0

“的Interop 101” 应该可以帮助您:Part 2使用P/Invoke来调用非托管C++的方法在C#和Part 4使用C++/CLI的桥梁。

1

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

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

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

+0

那么,在这种情况下,除了让C#代码指向x86以外,别无选择。然后它都很好。 –

+0

@DavidHeffernan在大多数情况下,终端用户和系统管理员都无法接受这种情况。我从Java经验讲,但我没有理由在.NET中思考,它会有所不同。现在大多数人拥有64位操作系统,默认安装64位运行时环境。您的x86库不会加载到这样的系统上,大多数人认为在64位(虚拟)硬件上安装32位运行时是不可接受的。 – Gert

+0

32位进程在64位Windows上运行非常漂亮。完全没有问题。 –