C++如何调用C#的DLL方法

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

0,概述

查了网上的资料,目前知道两种情况,一种是用C++/CLI(通用语言接口),另一种则是使用COM组建。

1,C++/CLI(通用语言接口)

下面代码参照:http://blog.csdn.net/qingzai_/article/details/53391662


1.1,C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TestDLL
{
    public class DLLExport
    {
        public int GetMax(int a, int b)
        {
            return (b > a ? b : a);
        }

        public int GetMin(int a, int b)
        {
            return (b > a ? a : b);
        }
    }
}
有两个方法,一个是取最大值,一个是取最小值。

编译生成TestDLL.dll。


1.2 C++代码

#include "stdafx.h"
#include <Windows.h>

#using "..\\TestDLL\\bin\\Debug\\TestDLL.dll"
using namespace
C#调用c++dll的两种方法(静态方法和动态方法 本文介绍了C#调用C++ DLL的两种方法。静态调用通过DllImport特性直接声明外部函数,需将DLL放在exe目录下;动态调用则使用LoadLibrary/FreeLibrary等API,可灵活指定DLL路径。文章详细说明了DllImport的用法,包括调用约定和错误处理设置,并提供了完整的代码示例,展示了如何封装DLL加载逻辑和调用基本数学函数。两种方式均需使用System.Runtime.InteropServices命名空间实现托管与非托管代码的互操作。 阅读详情

相关推荐

C#调用C++DLL类的方法

C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题。 C++生成的DLL一般只提供函数接口,不能直接用C#调用C++写的类,这样非常不方便,于是经过半天的反复测试,终于确定了一套可行的方案,下面就是整个流程的一个范例。 (1)编写C++类Mask,类前面的e...

菜鸟进阶 2621

C++builder 调用C# DLL

这是一个C++builder 调用C# DLL的标准范例,通过该范例的学习可以掌握BCB调用C#DLL方法。具有很强的学习和借鉴意义。

【45】C++/C#实战篇——C#调用C/C++生成动态库.dllC++ 生成动态库.dllDllImport()方式导入 C++动态库.dll方法总结

本文介绍了C#调用C/C++生成的动态库DLL的两种方法。首先说明C++生成的DLL中只有以C方式导出的函数才能被C#调用。然后通过Windows窗体应用项目演示了如何使用DllImport特性导入DLL中的函数,包括普通函数、类函数和以C方式导出的函数。测试结果显示,只有以extern "C"方式导出的函数能够成功被C#调用。文章提供了完整的代码示例,展示了如何通过按钮点击事件调用并显示DLL函数的计算结果。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2083

c++ 调用c#dll (2种方式,com组件和clr工程)

c++ 调用c#dll ,com组件和clr工程两种方式分别实现成功

qq_43525389的博客 9091

c++ 调用C#DLL

c++ 调用C#DLL1. 修改cpp属性常规-》公共语言运行时支持-》选择`/clr`代码生成-》启用c++异常-》选择`否`代码生成-》基本运行时检查-》选择`默认值`命令行-》其它选项-》输入`/Zc:twoPhase-`2. c#代码3. c++ 代码4 输出 1. 修改cpp属性 常规-》公共语言运行时支持-》选择/clr 常规-》调试信息格式-》选择无 代码生成-》启用c++异常-》选择否 代码生成-》基本运行时检查-》选择默认值 命令行-》其它选项-》输入/Zc:twoPhase

2996

C++C#应用:C++调用C#DLL

本文记录一种C++调用C#类库DLL方法。 软件环境:VS2015新建C#类库项目,如图: 添加代码如下: 二、调用DLL 1.新建C++Win32控制台程序 2.调用测试 添加调用代码,如图: 源码: 3.执行 将ClassLibrary1.dll拷贝至ConsoleApplication1.exe同级目录下,运行程序。 首先弹出helloworld! 输入整形数据完成输入传入、加法计算。 本文为C++调用C#类库DLL方法的简易示例。该示例能够证实C#语言编写的类库是可以在C++环境的程序中调用,解

DATA_3的博客 1816

C++ 调用C#工程的 dll , 互相调用方法

很多时候在项目中需要通过C++调用C#dll,或者反过来条用。 首先明白一个前提:C#是托管型代码。C++是非托管型代码。 托管型代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。(C# )        非托管型代码对象有实际的内存地址,创建的对象必须自己来管理和释放。(C++) 两者详细区别阅读我的另一篇:托管代码和非托管代码的介绍,以及在这区别下的混合调试方法 1、C#

MachiealFactory的博客 5万+

C#调用c++dll方法,动态调用c++dll方法

C#调用c++dll方法,动态调用c++dll方法

weixin_42103688的博客 2679

C# 调用 C++ DLL方法

感谢小白T哥 学习dll 调用 记录 在C# 中,可以通过 DllImport 调用C++ 的非托管DLL程序。 VS2010中C#调用C++DLL示例: 一、新建C++ DLL程序 1、新建 C++ Win32项目,类型为DLL。 生成的文件结构如图: 其中,“MyDLLFun.cpp”文件为此项目主要源文件。 2、在源文件中添加需要被外部调用方法。 这里仅仅是添加两个示例方法方法“Add”返回两个整数的和;方法Pow计算X 的 Y 次方,并以指针的形式修改参数 x 地址处的值。 修饰符 e

qq_40143976的博客 5983

一篇就够【C++生成的dllc#用的方法,使用 C++ 创建 DLL 并供 C# 调用

生成非托管 DLL方法: 在 Visual Studio 中创建一个 Win32 项目,选择 动态链接库 (DLL) 类型。添加以上代码,编译后生成 MyLibrary.dll 和对应的 MyLibrary.lib 文件。

qq_39030619的博客 1860

C# 调用 Cpp / C++编写的 dll方法

一般有两种: 1. 托管式 2. 非托管式 在 .NET 平台上,以 C# 开发为主时,建议使用托管式。 下面是托管式的用法: 1. 通过 Cpp 项目的 >> 属性配置 >> 高级 >> C++/CLI属性 >> 公共语言运行支持(/clr); 2. 点击项目 >> 属性 >> C/C++ >> 语言 >...

YDOOK 936

C#调用非托管C++DLL的两种方法

C#编写的代码属于跨平台的托管代码,C++语言可以编写托管(managed)和非托管(native)代码。在C#C++的混合编程中,经常会使用C#调用native C++DLL,下面有两种常用的调用方法供大家参考。 使用P/Invoke直接调用native C++ Dll 里面的函数。(注:此方法只能调用函数,不能调用class)。 C#通过C+

Qiushui127的博客 2880

C# 调用 C++ DLL方法_c调用c++dll

extern “C” __declspec(dllexport)加起来的目的是为了使用DllImport调用非托管C++DLL文件。修饰符 extern “C” 包含双重含义:首先,被它修饰的目标是“extern”的;说明:C++中函数Pow中传的为指针,也即是变量的地址,在C#修饰符 ref 即表示“传址”,所以C++中的 int*对应于 C#中的ref int。在C++中,函数参数为数组时传递的为数组的首地址,和数组的长度,如上。3)DLL中的方法,必须申明为 static,extern 的。

2401_87555514的博客 636

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

C#引用C/C++DLL的两种方法前言方法1:常用的DLLImport方法方法2:CLR封装法 前言 工作中,需要给客户提供公司产品的.NET动态库,但驱动工程师往往只提供C编译的库,这里就需要我做一些中间工作,方便客户使用我们的产品。 方法1:常用的DLLImport方法 一般这种方法用于调用非托管动态库,很常见,这里我就不做赘述,推荐一个好用的网站方便大家做参考, 链接: pinvoke.ne...

lxandcs的博客 2312
上一篇: embbed resource
下一篇: FTP主动模式和被动模式的区别
小小程序员_铨子
博客等级 码龄14年 3粉丝 10原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值