3

c#开发和学习(c#调用dll)

 2 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/127028108
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

c#开发和学习(c#调用dll)

嵌入式-老费 已于 2022-09-24 20:06:20 修改 20

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        c和c++作为早期的开发语言,积累了大量的可用库。后续的开发语言,虽然在易用性和容易程度上面有了很大的提高,但是对于曾经的开发库,是无法做到弃之不用的。因此,对于c#语言来说,也是一样的。今天就来讨论下如何用c#调用dll这个问题。

1、首先编写一个c++代码

        注意这里的c++代码是生成动态库,不是生成exe文件。后续c#就是使用这个动态库里面的函数。假设函数的内容是这样的,

2、生成动态库之后,准备c#代码

        初始创建工程后,一般什么内容也没有。这时候,需要做的第一步,就是添加InteropServices,即,

using System.Runtime.InteropServices;

        接着,第二步就是,从dll中引用导出来的函数。从上面c++的内容看,导出的函数有两个,一个是add,一个是sub,

        注意,这两个声明最好放在class里面。有了这两个声明之后,就可以开始准备使用这两个函数了,这也是所谓的第三步动作,

        有了上面的三步操作,不出意外的话,其实是可以看到3和-1这样的打印了,如下图所示,

085aa561b79b485faf6c803272a55408.png

        前面说到了c#调用了c++。总结一下主要有这么两点,第一,调用的时候传参和出参最好是基本的数据,比如char、int、char*、float、double这样的数据。第二,动态库一定要是extern "C" __declspec(dllexport)这样来定义,只有这样,才能将不确定性降到最低。最后为了方便大家复现这个问题,给出完整的c#参考代码,希望对大家有所裨益。



newCodeMoreWhite.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK