C#调用C/C++DLL的两种方法

2023-10-26

前言

工作中,需要给客户提供公司产品的.NET动态库,但驱动工程师往往只提供C编译的库,这里就需要我做一些中间工作,方便客户使用我们的产品。

方法1:常用的DLLImport方法

一般这种方法用于调用非托管动态库,很常见,这里我就不做赘述,推荐一个好用的网站方便大家做参考, 链接: pinvoke.net

方法2:CLR封装法

通过Visual studio新建一个支持CLR的DLL项目,项目调用原来c编译的库的Lib文件,然后重新封装一层方法写在这个项目里面。
下面举例创建一个CLRCom项目,关键代码如下:
引用Lib的头文件.h,这里是gxcom_lib.h

#pragma comment(lib, "gxcom.lib")

#ifndef DLL
#define DLL __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" {
#endif
//这是原来c编译dll中的方法,调用声明,例如
DLL DWORD __stdcall GetSN(HANDLE hCom);

CLRCOM.h

#pragma once
using namespace System;

namespace clrCOM
{
	public ref class CLRCOM
	{
	public:
		CLRCOM();
		~CLRCOM();

		DWORD CLR_GetSN(IntPtr ptr);//自定义方法
	};
}

CLRCOM.cpp

#include "gxcom_lib.h"
#include "CLRCOM.h"
namespace clrCOM
{
	CLRCOM::CLRCOM()
	{
	}
	CLRCOM::~CLRCOM()
	{
	}
	DWORD CLRCOM::CLR_GetSN(IntPtr ptr)//封装实现
	{
		HANDLE hDev=(IntPtr)ptr;
		return GetSN(hDev);//调用了原方法
	}
}

注意,.NET项目可以直接引用此项目生成的DLL(我这里是clrCOM.dll),但也要将原来C编译的DLL(我这里是gxcom.dll)拷过去,因为它是依赖文件,不然会报错“System.IO.FileNotFoundException”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#调用C/C++DLL的两种方法 的相关文章

  • 数据库组合索引

    索引用于快速找出在某个列中有一特定值的行 不使用索引 MySQL必须从第1条记录开始然后读完整个表直到找出相关的行 还需要考虑每次读入数据页的IO开销 而如果采取索引 则可以根据索引指向的页以及记录在页中的位置 迅速地读取目标页进而获取目标
  • 信用卡评分笔记

    信用卡评分语言 R语言 python 信用卡评分模型 ROC曲线 lift曲线 lorenz曲线 logistic回归 ROC IV WOE gini KS lift
  • SpringBoot 实现启动项目后立即执行方法的几种方式

    在项目开发中某些场景必须要用到启动项目后立即执行方式的功能 如我们需要去初始化数据到redis缓存 或者启动后读取相应的字典配置等 这篇文章主要聊聊实现立即执行的几种方法 一 CommandLineRunner和ApplicationRun
  • 3. C++调试时显示代码所在文件 / 函数 / 行号信息

    1 说明 在执行C 代码时 有时希望知道当前代码所在的文件名 函数名和对应行号位置信息 方便快速定位到代码所在处 想要获取这些信息 可以使用C 提供的一些宏进行获取 2 简单说明 FILE 用于获取当前语句所在源文件的文件名 func 用于
  • 尤雨溪对 2022 Web前端生态趋势是这样看的

    文章目录 前言 开发范式 底层框架方面趋势 基于依赖追踪范式 基于依赖追踪范式 共同点 基于编译的响应式系统 统一模型的优势和代价 基于编译的运行是优化 Vue Vapor Mode input 工具链 原生语言在前端工具链中的使用 工具链
  • pytorch实战-图像分类(二)(模型训练及验证)(基于迁移学习(理解+代码))

    目录 1 迁移学习概念 2 数据预处理 3 训练模型 基于迁移学习 3 1选择网络 这里用resnet 3 2如果用GPU训练 需要加入以下代码 3 3卷积层冻结模块 3 4加载resnet152模 3 5解释initialize mode
  • imagej得到灰度图数据_ImageJ的高级使用方法

    今天我们继续来聊一聊ImageJ的高阶使用技巧 问题三 为什么总是全部圈起来的灰度值 有没有大神指导呢求助 本问题涉及免疫印迹 Western Blot 分析 提问者不能分别得到每个条带的值 灰度值0为纯黑 255为纯白 灰度值与光密度值
  • 网页数据库服务器连接超时,数据库服务器连接超时

    数据库服务器连接超时 内容精选 换一换 执行以下步骤创建数据库连接 单击工具栏上的或按 Ctrl N 连接到数据库服务器 弹出 新建 选择数据库连接 对话框 建立连接时 如果首选项文件损坏或首选项值无效 会显示如下错误信息 提示用户首选项值
  • Java记录一次百万级别数据扫表统计的任务

    一 需求 统计近200万商家数据 每日通过查询计费系统更新其余额 二 技术栈 抛开分布式定时任务系统Elastic Job之外 我们先优先把单系统极限优化挖掘出来 由于博主接手的是14年的老项目 本地甚至都无法启动 所以不尝试用高级玩法 数
  • ts 子组件中 定义的方法报错

    报错事例 typtscript 组件中定义方法报错 不能将类型 onRef ref any gt void 分配给类型 IntrinsicAttributes IntrinsicClassAttributes
  • Kubernetes組件介绍

    Apiserver 是公开Kubernetes API的Kubernetes控制平面的组件 Etcd 一致和高可用的键值存储用作Kubernetes的所有集群数据备份存储 Kube scheduler 它监视没有分配节点的新创建的pod 并
  • Drools规则引擎

    Drools规则引擎 Drools规则引擎 1 Drools简介 2 Drools入门案例 2 1 业务场景 2 2 maven坐标 2 3 编写xml配置文件 多方法 2 4 创建drl规则文件 2 5 单元测试 3 Drools基础语法
  • 东宝商城项目(三)——用户注册功能的实现(后端)

    本文是我做项目过程中记录的学习笔记 用于记录项目开发流程 第一次做项目有很多不懂的地方 本文可读性暂时很差 我目前的学习目标是走完项目开发流程 知道独立开发一个项目并让项目上线需要经历哪些步骤 需要学到哪些知识点 现将遇到的问题记录如下 发
  • 100流明相当于多少w_20平米客厅用多少瓦的LED灯合适?怎么选择合适的亮度?

    说到照明用灯 离不开三个要素 亮度 照度和色温 亮度大家都明白意思 指的是眼睛所感受到的光线刺激强度 照度则是指单位面积获得的亮度 色温则可以理解为指灯光的颜色 常见如白光 暖光和暖白 下面详细说一下这三者与平常家庭用灯的关系和搭配 一 L
  • 【数学建模】动态规划作业

    目录 一 作业1爬楼梯 二 作业二机器人走格子 三 机器人走有障碍的格子 四 投掷头子的N种方法 五 编辑距离 一 作业1爬楼梯 作业1 爬楼梯 题目来源 力扣70 爬楼梯 链接 https leetcode cn com problems
  • 投资理财笔记——理财的心理建设 & 基金概念入门

    文章目录 理财的心理预期 基金概念入门 理财的心理预期 学习投资理财的目的 是为了更清晰的认识到自己买的理财产品是什么 它的风险有哪些 是否能够承担这样的风险 其目的并不是在于赚更多的钱 因为风险和收益是成正比的 目的在于更清晰的认识 认识
  • 作为2019年的Java程序员,如何能快速进阶成长?

    面试候选人的时候 有个比较常见的问题 对于一份工作 你最关注哪些因素 回答往往是薪资待遇 公司氛围 公司发展前景 工作强度等 个人比较欣赏的答案是 个人能力的成长 想收获一个薪资好 公司发展前景好的工作机会 关键和根本还是取决于个人的能力
  • 考研:研究生考试(五天学完)之【政治考试】之研究生学霸重点知识点总结之考试内容各科占比及其知识结构重点(马概、毛中特、史纲、思修)

    考研 研究生考试 五天学完 之 政治考试 之研究生学霸重点知识点总结之考试内容各科占比及其知识结构重点 马概 毛中特 史纲 思修 目录

随机推荐

  • Python中的logger和handler到底是个什么鬼

    原文地址 http www cnblogs com anpengapple 最近的任务经常涉及到日志的记录 特意去又学了一遍logging的记录方法 跟java一样 python的日志记录也是比较繁琐的一件事 在写一条记录之前 要写好多东西
  • 小程序的应用生命周期、页面生命周期

    一 应用生命周期 小程序从启动 gt 运行 gt 销毁的过程 应用生命周期函数 应用生命周期函数在 app js 中声明 执行顺序如下 onLaunch 小程序初始化完成时触发 全局只触发一次 先于所有页面周期函数执行 onShow 小程序
  • IT公司智力题(持续跟新中)

    请听题 用赵本山在 买车 的语气 1 有1000瓶药物 但是其中有一瓶是有毒的 小白鼠吃了一个星期以后就会死掉 请问 在一个星期内找出有毒的药物 最少需要多少只小白鼠 解答 用二进制的思路去思考 1000瓶药代表了1000种状态 那么100
  • 边界值分析法:

    测试用例一 测试用例介绍 等价类划分法 边界值分析法 重点知识目标 测试用例的定义 测试用例核心要素 等价类划分法 边界值分析法 能力目标 掌握测试用例的定义 掌握测试用例核心要素 掌握等价类划分法 掌握边界值分析法 测试用例核心要素 用例
  • 06.图像识别与卷积神经网络------《Tensorflow实战Google深度学习框架》笔记

    一 图像识别问题简介及经典数据集 图像识别问题希望借助计算机程序来处理 分析和理解图片中的内容 使得计算机可以从图片中自动识别各种不同模式的目标和对象 图像识别问题作为人工智能的一个重要领域 在最近几年已经取得了很多突破性的进展 其中 卷积
  • Java基础学习系列--(二)static关键字概述

    2 1 概述 以前我们定义过如下类 public class Student 成员变量 public String name public char sex 男 女 public int age 无参数构造器 public Student
  • 最新重磅!ChatGPT插件商店全开放!我发现了未来互联网的新入口

    四月初 当ChatGPT首次提出联网和插件计划并放出测试Demo的时候 曾着实让人们惊艳了一把 从当时的内部测试来看 ChatGPT不仅能够比搜索引擎更加智能地来帮你查找最新信息 还能够变身为 App Store 成为万能应用生态的总入口
  • 论文笔记 -- SOFT: Softmax-free Transformer with Linear Complexity

    文章目录 SOFT Softmax free Transformer with Linear Complexity Background Motivation 投影相关工作 Contribution Related work 对于自注意力矩
  • oracle 查询schema下的所有表, 字段, 和注解 的SQL

    oracle 查询schema下的所有表 字段 和注解 SELECT a TABLE NAME b column name c COMMENTS b data type b DATA LENGTH b NULLABLE FROM selec
  • Go语言基础【函数】

    函数 定义一个函数 func 函数名 形参列表 返回列表 函数体 函数有以下几种定义方式 第一种 func 函数名字 第二种 func 函数名字 返回值 return 返回值 第三种 func 函数名字 参数列表 第四种 func 函数名字
  • No suitable driver found for jdbc:mysql://127.0.0.1:3306 问题

    Exception in thread main java sql SQLException No suitable driver found for jdbc mysql 127 0 0 1 3306 at java sql Driver
  • athas热更新代码

    热更新 热更新有什么用 比如 生产环境有一个逻辑不小心写错了 导致资产损失 如果修改代码 重新发布到生产环境 需要的时间比较长 而且生产环境重启 也可能会影响到其他的用户 热更新 可以不用重启环境 修改代码对应的字节码 达到修改功能的目的
  • bert serving的简单使用(文本向量化)

    不涉及原理 只是快速开始使用 更详细的请参考官方文档 https bert as service readthedocs io en latest index html 文章目录 可用环境 1 下载预训练模型 2 安装python库 3 启
  • python没有main函数也可以_为什么Python没有main函数?,

    为什么Python没有main函数 我为什么也不推荐 毫无疑问 Python中没有所谓的主入口函数 但是互联网上经常有文章提到 Python的Main函数 和 建议编写Main函数 他们的目的可能是模仿真实的主要功能 但是许多人被误导 或误
  • 串的BF和KMP算法匹配

    BF代码 status Index BF SString S SString T int pos pos的作用确定起始查询位置 int i j i pos j 1 while i lt S length j lt T length if S
  • 刷脸支付科技的高速发展改变人们消费观念

    移动支付巨头支付宝及微信先后推出自己的刷脸支付产品 而从发布时间及命名上不难嗅到其中浓浓的火药味儿 而支付宝更是计划投入30亿资金 用于推广刷脸支付市场 在两大巨头竞争互相下 刷脸支付必然会像扫码支付一样得到快速普及 刷脸支付能够如此迅速地
  • BIOS Rootkit:Welcome home,my Lord!

    BIOS RootKit Welcome Home My Lord Author Icelord Contact icelord sohu com Data 2007 04 26 gt 本文介绍一个简单BIOS rootkit的简单设计过程
  • MFC对话框添加菜单栏

    1 解决方案资源管理器 资源文件 rc双击 转至资源视图 2 资源视图 右击 rc 添加资源 Menu 新建 图形化界面编辑 3 图形化编辑完成后 切换到目标对话框的头文件 Dlg h 在类的成员定义处添加一个CMenu变量 比如 4 切换
  • uni-app中scroll-view不触发@scrolltolower事件(某些机型)

    uni app中scroll view不触发 scrolltolower事件 某些机型 背景 uni app中scroll view中用 scrolltolower的时候需要设置lower threshold的值 a 当设置为10的时候 某
  • C#调用C/C++DLL的两种方法

    C 调用C C DLL的两种方法 前言 方法1 常用的DLLImport方法 方法2 CLR封装法 前言 工作中 需要给客户提供公司产品的 NET动态库 但驱动工程师往往只提供C编译的库 这里就需要我做一些中间工作 方便客户使用我们的产品