C#创建和调用托管的DLL

C#调用C++DLL传递结构体数组的终极解决方案 在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应。这时怎么办,第一反应是C#也定义结构体,然后当成参数传弟。然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是返回值却不是我们想要的,经过调试跟踪后发现,那些值 阅读详情

本文介绍利用 c# 创建和调用托管的 DLL 的方法和给出一个示例,采用的环境是 vs2005.

托管 DLL 的创建和调用

利用 vs2005 ,菜单,文件, c# 语言, window, 类库,代码如下:

using System;

using System.Collections.Generic;

using System.Text;

namespace Libary_Test

{

    public partial class Form1 : Form

     {

        public Form1()

        {

            InitializeComponent();

        }

        public void   Function()

        {

            MessageBox .Show(Class1 .Calc(10).ToString());

        }

 

        private void button1_Click(object sender, EventArgs e)

         {

            Function();

        }

    }

}

在c# 当中,我们是以命名空间来来组织的,所以在在调用的时候也是一样,编译生成dll 文件。

在写一个示例的程序来调用它。

using Libary_Sample;

namespace Libary_Test

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public void   Function()

        {

            MessageBox .Show(Class1 .Calc(10).ToString());

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Function();

        }

}

 

 

上面是代码:我们有几步需要搞清楚。

1 把之前生成的dll 文件存放在我们的调用端的文件夹中,避免丢失。

2 添加引用,在解决方案里面添加对dll 的引用。

3 添加命名空间的引用using Libary_Sample.

 

       这样我们就完成了托管的 DLL 创建和调用!实际上可以理解相当于一个类的声明,只不过这里是以 dll 的形式,而非文件的形式!

 

 

非托管的调用:

       这个我们就是称之为调用外部的 DLL, 例如用 c++ 语言编写的。

首先我们需要声明一个本地的 DLL 实现方法。具体的是用参数 static 和 extern 来声明方法,接着在声明前加上 DllImport 特性。

首先我们来详细的讲解下 DllImport 的特性和使用方法( MSDN ) , 在这里我们就是叫做平台调用( P/Invoke )

DllImport() : 该属性化方法由非托管动态链接库 (DLL) 作为静态入口点公开。

 

       下面给出一个例子来调用 Wind32 api 函数的例子。

using System.Runtime.InteropServices;

 </

C#调用C++的dll方法 C#调用C++的dll总归可以有两种方法: 1、非托管C++创建的dll库,需要用静态方法调用; 2、直接使用CLR,生成托管C++dll库。 阅读详情

相关推荐

如何实现C++调用C#的dll方法教程

SwfDotNet是C#编写的,这是个特别好的读写Swf文件的库。本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件。 具体的实现步骤如下: 一、创建C# DLL,需要指定应用类型为“类库”,代码: [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08

三火哥 968

C#调用非托管DLL函数

一 概念 运行时处于控制之下的代码称为托管代码,反之,在运行环境(runtime)之外运行的代码称为非托管代码。 平台调用(来自consuming unmanaged dll functions)是一个可以使托管代码调用在DLL中实现的非托管函数,例如那些win32 API。它找到和调用导出的函数,同时根据需要将函数的参数(整形,字符,数组,结构体等等)通过互操作边界(interopera

小柯的博客 4042

【托管C++(CLI)】【简单示例】C#调用C++/CLI(以DLL形式调用)

【本文章发布于优快云,未经个人同意不得转载】 【原文地址:【托管C++(CLI)】【简单示例】C#调用C++/CLI(以DLL形式调用)】 因为操作太多了,纯文本描述实在是不方便,直接来个图文说明 ①、【一个平淡无奇的C++空项目】 ②、【设置该C++项目的项目属性】 “符合模式”这个东西我也不知道是干啥的,但我也不怎么感兴趣,翻车的时候再来看看好了 ③、【写一个C++的托管类(CLI),调用之前写的C++类,然后生成DLL文件】 简单说明下这个CLI的语法: ①、托管类要用r

weixin_44733774的博客 4907

C#调用非托管C++DLL:通过托管C++DLL间接调用

现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额。因此很多以前搞VC++开发的人都转向用更强大的VS.Net。在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类的问题。下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++类以提供给C#使用。 比如,现在有一个工程名为NativeCppDll的由C++编写的DLL,里面输出了一个CPe...

菜鸟进阶 653

UG/NX 二次开发(C#) C#调用C++ 非托管dll的实现

说白了,就是 完全由.NET托管代码实现的DLL,完全依赖于 .NET 平台的 CLR 运行。托管DLL,受.NET CLR管控,支持内存自动回收等的,对于.NET平台是安全DLL。,是指完全或者部分 不是用.NET代码实现,不依赖于.NET平台即可运行,例如 COM方式 的DLL,不支持自动回收内存,对于.NET平台而言,也是非安全可控的。1、首先解决C++非托管动态链接库的问题,需要VS版本2017以上,因为低版本VS创建的DLL都是32位,调用的时候会报错。第二步:导入Dll方法。

MarcoPro的博客 1663

c++调用c#托管dll文件方法

由于项目要求,需要实用c++调用c#托管dll文件,以下按步骤说明: 1、c#中生成dll文件,项目名称为:CSLib,类名为:Class1, 主要代码如下: using System; using System.Collections.Generic; using Sy

hufengjun的专栏 1231

纯C# 托管与非托管DLL注入

纯C# 托管与非托管DLL注入

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 278

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南

本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。

weixin_29271263的博客 369

STM32F407+LWIP实战:手把手教你移植mbedtls库实现Modbus TCP双向认证

本文详细介绍了如何在STM32F407微控制器上移植mbedtls库,结合LWIP协议栈实现Modbus TCP的双向认证功能。通过TLS 1.2加密通道,有效提升工业物联网通信的数据安全性,涵盖证书管理、内存优化及性能调优等关键步骤,为嵌入式系统开发者提供了一套完整的解决方案。

weixin_28721917的博客 516

STM32F103电压采集proteus仿真

基于HAL库,仿真单片机型号为stm32f103R6,代码keil5。通过单片机的ADC采集功能,测量四路电压,数据经由DMA传输,并将结果通过串口输出,结果比较确,误差在0.01V左右。目前仿真采集四路比较稳定,多了会乱码。proteus版本8.11安装包链接:https://pan.baidu.com/s/1yhNKLl1lGSU9KU0tTuAxcg?pwd=dxe8提取码:dxe8项目下载地址:.

weixin_42490599的博客 4766

DeepSeek-OCR又更新:一起看下OCR1和OCR2

DeepSeek-AI 最近又又开源了,这次是DeepSeek-OCR2,结合之前发布的DeepSeek-OCR ,可以发现DeepSeek走出了一条不同于主流 OCR 方案的技术路线。第一代模型探索了**“视觉作为文本压缩介质”的可行性,打破了传统的序列长度限制;第二代模型则通过“Visual Causal Flow(视觉因果流)”**架构,将因果推理引入视觉编码器,解决了复杂排版下的阅读顺序难题。本文将从架构设计、逻辑结构、训练范式及工程实现四个维度,深度剖析这两代模型的异同与创新。

kakaZhui的博客 622

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

ArcMap|使用模型构建器将kml文件批量转图层

参考:https://www.jianshu.com/p/6de18f846024 第一步:打开模型构建器,拖入kml转图层工具 第二步:插入文件迭代器 第三步:双击“迭代文件”,选择kml所在文件夹 第四步:将“File.kml”与“KML转图层”连接,点击“输入KML文件” 第五步:双击“KML转图层”,更改输出位置,输出数据名称改为%名称% 第六步:运行模型 得到结果: ...

个人学习笔记 3601

大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略

本篇文章是《Spring AI实战》专栏的第一篇开发入门文章,我们将借助一个完整的OpenAI聊天应用示例,详细介绍如何运用Spring Boot和Spring AI快速搭建一个支持OpenAI API的聊天服务,全面涵盖基础对话、流式对话、多提供商配置等核心功能。

寻道AI,探索AI无限可能! 6865

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: C#2005高级编程11Chapter内存管理和指针
下一篇: C#预处理指令
dadahacker
博客等级 码龄20年 78粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值