首页 > 编程语言 >C#中调用c++的dll具体创建与调用步骤,亲测有效~ (待验证)

C#中调用c++的dll具体创建与调用步骤,亲测有效~ (待验证)

时间:2023-06-05 22:33:37浏览次数:53  
标签:下面 调用 函数 C# c++ dll c#

使用的工具是VS2010哦~其他工具暂时还没试过

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_02

我新建的工程名是my21dll,所以会生成2个同名文件。接下来需要改动的只有画横线的部分

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#_03


下面是my21dll.h里面的。。。

下面的1是自动生成的不用动,或者也可以不要,因为只是一个宏而已下面可以做相应修改。

下面的2是自动生成的类,我没用就注释掉了

下面的3是自动生成的一个测试函数,原来函数最前面是extern,记住精髓是要改成EXTERN_C 

下面的4是我自己写的一个测试函数,用来求和

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_04


下面是my21dll.cpp里面的

 号3对应上面号3的函数,号4对应上面号4对应的函数。

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_05


下面要修改工程的属性

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_06


下面是生成dll,两个红线的都可以

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c++_07


然后就可以在DeBug文件夹下看到dll了(~ ̄▽ ̄)~

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#_08


再创建一个c#的控制台程序调用看看吧

我那是两个分开的函数,所以每一个都要写一个DllImport和extern static来声明,然后下面就可以像调用普通函数一样调用了。

<( ̄ˇ ̄)/

 

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c++_09


输出

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#_10


后来我又测试了一下,假如c#中调用的c++函数里调用了c++里的其他函数,里面套用的那些函数也需要声明吗?

我先把.h里面的fnmy21dll()注释掉

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#_11


又把.cpp文件里函数做了相应修改

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_12


c#的函数也只声明了Add函数,看看行不行~

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_c#_13


结果,没问题,成功了,说明只要最终在c#中显示出来的函数进行了声明就可以了,而且那些被调用的函数也可以像普通函数那样去写,只有不要export的函数写上输出的声明就可以了(^-^)V

C#中调用c++的dll具体创建与调用步骤,亲测有效~  (待验证)_自动生成_14



标签:下面,调用,函数,C#,c++,dll,c#
From: https://blog.51cto.com/u_4018548/6420110

相关文章

  • 【loj3396】novel(AC自动机维护文本串子串的匹配信息)
    设当前询问的串为\(s_i\)记为\(t\)。考虑\(r\)右移,维护每个\(l\)对应的\(g(l,r)\)和\(\max_{l}\frac{g(l,r)}{r-l+1}\)即可。最基本的观察是:当\(r\)右移后,考虑\(t_{1..r}\)在AC自动机上匹配到的点\(p\),那么对于\(p\)的任意祖先(包含\(p\))\(u\),都会给\(l\leq......
  • DataTemplateSelector介绍
    DataTemplateSelector可以帮助我们实现动态选择数据绑定的模版,如通过ListView+DataTemplateSelector实现微信朋友圈或聊天列表效果。Github已有聊天效果图  喜欢阅读代码请直接移步:https://github.com/nishanil/Xamarin.Forms-Samples/tree/master/DataTemplateSelector本文通过......
  • C#中的垃圾回收
     ......
  • C# 线程池ThreadPool的用法简析
    什么是线程池?为什么要用线程池?怎么用线程池?1.什么是线程池?.NETFramework的ThreadPool类提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步I/O、代表其他线程等待以及处理计时器。那么什么是线程池?线程池其实就是一个存放线程对象的“池子(pool)”,他提供了一些基本方......
  • post请求方式 - 抖音生活服务 使用restTemplate而不使用httpClient
    publicstaticStringdoPostForJson(Stringurl,Stringjson,StringbyteAuthorization){RestTemplaterestTemplate=newRestTemplate();logger.info("restTemplateinvokepostmethod.url:[{}],json:[{}]",url,json);long......
  • 【网络基础】用了 TCP 协议,数据一定不会丢吗?
    1  前言TCP是一个可靠的传输协议,那它一定能保证数据不丢失吗?这次,就跟大家探讨这个问题。2  数据包的发送流程首先,我们两个手机的绿皮聊天软件客户端,要通信,中间会通过它们家服务器。大概长这样。但为了简化模型,我们把中间的服务器给省略掉,假设这是个端到端的通信。且为了......
  • net core+mediatr+EF实现事件触发
    参考杨中科的教程1.先添加接口usingMediatR;namespaceNetOptions.Entities;publicinterfaceIDomainEnvent{voidAddNotification(INotificationnotification);IEnumerable<INotification>GetNotifications();voidClearNotifications();}2.添加抽......
  • C++面试八股文:如何在堆上和栈上分配一块内存?
    某日二师兄参加XXX科技公司的C++工程师开发岗位6面:面试官:如何在堆上申请一块内存?二师兄:常用的方法有malloc,new等。面试官:两者有什么区别?二师兄:malloc是向操作系统申请一块内存,这块内存没有经过初始化,通常需要使用memset手动初始化。而new一般伴随三个动作,向操作系统申请一......
  • hackthebox sniper medium
    主机发现nmap--min-rate1000-p-10.10.10.151发现80和445端口端口探测首先利用smbclient进行端口探测smbclient-L//10.10.10.151连接错误(后面发现是因为本地smb配置错误导致的)切换方向访问80端口发现是一个类似博客的页面鼠标悬浮可以查看到左下角的悬浮跳......
  • docker 部署xxx-job
    1拉取镜像:dockerpullxuxueli/xxl-job-admin:2.3.02创建容器:dockerrun-d--privileged-ePARAMS="--spring.datasource.url=jdbc:mysql://1.15.242.247:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC--s......