首页 > 编程语言 >C#调用C++的dll方法

C#调用C++的dll方法

时间:2024-07-26 17:28:57浏览次数:12  
标签:调用 C# System C++ dll using

C#调用C++的dll方法

有时候用一些硬件厂家的库函数,厂家没有支持C#的,就只有C、C++语言,这个时候只能将C、C++编译成dll文件,然后用C#来调用这些接口。
下面使用环境为vs2010,win32,x86

C++打包成为dll

首先创建一个win32的C++项目
image

然后点击向导中的dll
image

然后在这个文件中编写dll的函数
image

举例如下

#include "stdafx.h"
#include <iostream>
using namespace std;
//必须写上extern "C" __declspec(dllexport) 
//后面函数定义按照正常来写
extern "C" __declspec(dllexport) void Hello() 
{
	cout<<"你好"<<endl;
}

然后点击上面绿色按钮或者F5运行编译,无法运行不要紧,进入项目的文件夹的Debug文件夹中,找到.dll后缀名的文件,这样C++的dll文件就做好了
image

image

C#调用dll

先进入C#项目中的Debug文件夹中,将dll直接放入
image

接下来在C#的项目中创建一个cs文件,用于调用dll的接口
例子如下:

using System.Runtime.InteropServices; // 用 DllImport 需用此 命名空间
using System.Reflection; // 使用 Assembly 类需用此 命名空间
using System.Reflection.Emit; // 使用 ILGenerator 需用此 命名空间
 [DllImport("CPPDLL.dll", EntryPoint = "Hello", CallingConvention = CallingConvention.Cdecl)]
        public static extern void Hello();

c#的接口函数必须和C++一致,然后函数必须是public static类型
函数的上面必须写上你调用的dll文件名和函数名称,后面一个用于内存对齐

标签:调用,C#,System,C++,dll,using
From: https://www.cnblogs.com/AndreaDO/p/18325815

相关文章

  • 【踩坑系列-Docker】基于Alibaba Cloud Linux3基础镜像安装Nginx
    Author:赵志乾Date:2024-07-26Declaration:AllRightReserved!!!1.问题描述    使用AlibabaCloudLinux3作为基础镜像,在其上安装Nginx,对应的Dockerfile内容如下:#指定基础镜像FROMalibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:lat......
  • 在.net 8中使用HttpClientFactory时日志记录请求body和响应body
     1、定义DelegatingHandlerpublicclassLoggingHandler:DelegatingHandler{privatereadonlyILogger<LoggingHandler>_logger;publicLoggingHandler(ILogger<LoggingHandler>logger){_logger=logger;}protectedov......
  • 二叉树及其存储实现C语言(附上源码)
    1.什么是二叉树        二叉树是一种特殊的树型结构,其特点是每个结点至多只有两棵子树(即二叉树不存在度大于二的结点),并且二叉树的子树有左右之分,次序不可颠倒【有序树】。 2.二叉树的定义二叉树T:一个有穷的结点集合。    -这个集合可以为空;    -......
  • jeecg boot 企业级应用管理后台 (五)菜单模块介绍 从0开始 (持续更新)
    Jeecg的菜单模块是其重要组成部分,管理和展示应用程序中的导航菜单。以下是关于Jeecg菜单模块的详细介绍,涵盖了数据库、前端和后端的各个部分。数据库部分Jeecg的菜单模块在数据库中通常涉及以下几个表:菜单表(sys_menu):存储菜单的基本信息,如菜单名称、路径、图标、父级菜......
  • jeecg boot 企业级应用管理后台 (六)权限模块介绍 从0开始 (持续更新)
    数据库部分Jeecg的权限模块在数据库中通常涉及以下几个表:权限表(sys_permission):存储权限的基本信息,如权限名称、权限标识、描述等。CREATETABLE`sys_permission`(`id`BIGINTNOTNULLAUTO_INCREMENT,`name`VARCHAR(50)NOTNULLCOMMENT'权限名称',`perms`......
  • MAC、ARP、NAT
    文章目录MACMAC帧格式MAC地址ARP协议ARP的数据包格式NAT和代理IP地址的数量限制NAT代理服务器MAC数据在局域网中如何发送就是数据链路层解决的。MAC帧格式源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。帧协议类型字段......
  • 易优CMS模板标签ui开关标签
    【基础用法】标签:ui描述:可视化类型的模板必须引入的主标签,建议在html代码的body底部引入,该标签包含外观调试通用的css、js。用法:{eyou:uiopen='off'/}属性:open=''是否开启,on为开启,off为关闭涉及表字段:无  【更多示例】-------------------------------示例1----------......
  • 易优CMS模板标签SQL数据查询查询数据表ey_arctype,指定栏目ID的基本信息,不使用数据缓存
    【基础用法】标签:sql描述:用于获取MySQL数据库内容的标签。用法:{eyou:sqlsql=''cachetime='3600'empty='没有数据'}{$field.数据表相应的字段名称}{/eyou:sql}属性:sql=''需要查询的SQL语句cachetime='3600'数据缓存时间,默认缓存25小时,即86400秒empty=''没有数据时显示......
  • Listen(sockfd,backlog)监听函数的第二个参数到底是什么?深度解释
    listen队列剖析intlisten(intsockfd,intbacklog)   backlog: 监听套接字队列对于一个调用监听的套接字,系统会维护给这个套接字两个队列1.未完成连接队列 //当客户端发生三次握手的第一次syn包给服务器的时候,服务器就会再未完成队列中创建一个跟这个syn包对......
  • ARCH716 Climate Sensitive Single
    ARCH716Assignment-CreatingaClimateSensitiveSingle Person Homefrom a Shipping ContainerIntroductionWhen Malcolm McLeandevelopedtheshippingcontainerinthe 1950s, he revolutionizedthe transport industry. There are somewhere betwee......