首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使Win32动态链接库在C#应用程序中可引用?

如何使Win32动态链接库在C#应用程序中可引用?
EN

Stack Overflow用户
提问于 2013-07-19 05:10:17
回答 2查看 935关注 0票数 2

我有一个相当大的遗留nmake (Win32)项目,它从本地C++代码创建一个静态库。我需要在一个C#/.Net应用程序中使用这个库。在过去,经过大量努力,我成功地将静态库包装在托管C++库中,然后我可以在C#/.Net应用程序中引用该库。然而,在收到nmake项目开发人员的更新,并在此期间在我自己的构建机器上进行了多次升级后,它不再工作。

但是,通过在构建属性中设置所有预处理器常量,我可以导入nmake项目的cpp和头文件,并将其构建到VS2010中的Win32静态库中。我将构建配置类型设置为DLL,然后尝试在希望使用P/Invoke的C#/.Net应用程序中添加对Win32输出的引用,但失败了,并显示一条消息"A reference to MyLibrary not be add“。

有没有办法构建Win32库,这样它就可以被C#/.Net项目引用,这样我就可以使用P/Invoke?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-19 05:15:52

有没有办法构建Win32库,这样它就可以被C#/.Net项目引用,这样我就可以使用P/Invoke了?

如果您希望直接引用该库,则需要使用您的库构建一个C++/CLI项目,并制作托管包装器。

如果您想使用P/Invoke (这是一个单独的概念),您可以使用C API进行导出,并通过P/Invoke直接调用这些API。

这两种方法都是有效的,但在本机端的实现(C++/CLI与C API包装器)方面完全不同,并且使用方式也不同(通过[DllImport]直接引用C++/CLI与P/Invoke )。

票数 2
EN

Stack Overflow用户

发布于 2013-07-19 05:23:16

您可以使用SWIG为您的代码生成包装器。SWIG是一个非常强大的工具,值得花时间学习。它为包括Python、C#和Java在内的多种语言创建了包装器,因此如果您将其用于一种语言,那么在其他语言中也很容易使用它。它将为您生成所有的包装器代码,尽管您可能需要对类型做一些工作。使用swig创建一个特殊的动态链接库,SWIG为该动态链接库生成代码,然后使用提供的C#代码访问该动态链接库,而无需处理托管C++程序集,这可能是一场噩梦。

http://www.swig.org/Doc2.0/SWIGDocumentation.html

编辑:我的解释可能不是那么清楚,文档也是相当压倒性的,看看"What is swig?“部分开始:

http://www.swig.org/Doc2.0/SWIGDocumentation.html#Introduction_nn2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17733932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档