在C++ 中 如何调用 C# 写的DLL

C#调用C++写的Native DLL C#部份 namespace testInteroperability { class MsgBoxTest { [DllImport("user32.dll")] static extern int MessageBox(IntPtr hWnd,string text, string caption,int type); pub 阅读详情
  对于很多和我一样的老C++程序员来讲,如果不能与时俱进,不但会倍感失落,还会真的自绝于天下。
     比如C#有很多好的组件, 如NPOI ,如。。。 ,怎么在C++中也自如调用呢,这样不用去学习C#,不用换刀,也可以达到同样的目的。
网上看了半天,找到的资料要么太老,要么不对,干脆自己调试一遍。下面把体会说一说。
调试环境:visual studio 2010 .
时间:2012.12.20

一、C#写的类库:


using System;
using System.Collections.Generic;
using System.Text;

namespace ClassLibrary1
{
       public class Class1
       {
               public String Name
               {
                       get;
                       set;
               }
               public void helloWorld()
               {
                       Console.WriteLine("hello world!");
               }

       }
}

// C#程序配置,一定是类库
在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL




二、C++ 程序
共有三个程序文件

(1) 主程序
// test1.cpp : 定义控制台应用程序的入口点。
//
///

//
//   在C++ 项目属性 [配置]-[常规] 中,公共语言运行时支持,一定要选择“公共语言运行时支持”
//
#include "stdafx.h"
#include "yotopcompany.h"

#using "..\ClassLibrary1\bin\Debug\ClassLibrary1.dll"                     //引用C#类库
using namespace ClassLibrary1;                            // 声明命名空间,非必须
int _tmain(int argc, _TCHAR* argv[])
{
       printf("hello world");

       ClassLibrary1::Class1 ^c = gcnew ClassLibrary1::Class1();     //注意一定要用 ^   , 一定要用gcnew
       c->Name = "\nxignxianghong";
       printf("%s\n", c->Name);
       c->helloWorld();
       YotopCompany ^a   = gcnew YotopCompany("a","b","c");
       printf("%s,%s,%s",a->name,a->address,a->phoneNumber);
       getchar();
     
       return 0;
}
(2) c++ 中自己编写的一个类
// yotopCompany.h

#pragma once
ref class YotopCompany
{
public:
       YotopCompany(void);
       YotopCompany(char* name,char* address,char* phoneNumber);

       char* name ;
       char* address;
       char*   phoneNumber;
};


(3) c++编写的类的CPP文件
//yotopcompany.cpp

#include "StdAfx.h"
#include "YotopCompany.h"


YotopCompany::YotopCompany(void)
{
       name = "yotop";
       phoneNumber = "12345678" ;
       address = "北京";
}
YotopCompany::YotopCompany(char*_name ,char* _address,char* _phoneNumber)
{
       name = _name;
       address = _address;
       phoneNumber = _phoneNumber ;
}

(4) c++ 程序配置



在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL



三、如果还有疑问,请参考 MSDN 文章:
// How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005
// 如何在 Visual Studio.NET 或 Visual Studio 2005 中的本机 Visual C++ 代码中调用托管的 DLL
//    http://support.microsoft.com/kb/828736

四、总结:
1)用C#写任何的类库
2)C++ 中要引用此类库
3)创建C#对象时要用gcnew ;
4) C++ 编译设置一定设置为:支持 公共语言运行时支持(/clr)
4) 自身的C++类要用 ref class 定义。
  希望关心上述主题的朋友能够如愿以偿,GOOD LUCK!
C++调用C#的DLL实现方法 SwfDotNet是C#编写的,这是个特别好的读写Swf文件的库。本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件。 具体的实现步骤如下: 一、创建C# DLL,需要指定应用类型为“类库”,代码: namespace CSLib { public class Class1 { private string name; public string Name { get { return name; } set { name = "Your Name: 立即下载

相关推荐

无人机中继传输数据链技术,(无人机+自组网)远距离传输技术实现详解

无人机中继传输数据链技术是指利用无人机作为空中移动中继节点,在需要通信的区域上空悬停或移动,以建立和维护通信链路,从而扩展通信范围、提高通信质量和灵活性。1. 通信链路:是无人机中继通信的重要组成部分,包括源节点到中继节点的链路和中继节点到目标节点的链路。同时,它还支持空中到地面的通信,距离大于100km。总的来说,无人机中继传输数据链技术和(无人机+自组网)远距离传输技术都是现代无人机通信领域的重要技术,它们的应用极大地扩展了无人机的通信范围和灵活性,为各种应用场景提供了强有力的支持。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2081

C++调用C# dll成功示例

1)需要把dll复制到运行目录下。(不然会提示找不到dll System.IO.FileNotFoundException:“未能加载文件或程序集“CSLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件)2)设置"公共语言运行时支持"(不然提示"#using" 需要 C++/CLI 模式)3)下载C++/CLI支持。

chenhao0568的专栏 1975

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。

DeepAIedu的博客 2633

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

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

qq_43525389的博客 9132

TeXstudio完整安装配置教程(2025最新版)

至此,你已经完成了TeXstudio的完整安装和配置!现在你可以:✅ 使用TeXstudio编写LaTeX文档✅ 正确编译中英文混排的文档✅ 掌握基本的编辑和配置技巧LaTeX的学习曲线较陡,但一旦掌握,你会发现它在学术写作中的强大之处。建议从简单的文档开始练习,逐步掌握更高级的功能。祝你LaTeX写作顺利!如果有任何问题,欢迎在评论区留言交流。关键词:TeXstudio安装、LaTeX环境配置、中文LaTeX、TeX Live、学术论文写作更新日期:2025年10月。

weixin_51241407的博客 4506

SAP录入总账凭证报错 公司代码未被分配给国家或用于计算程序的国家消息号 FF703

SAP系统报错FF703的解决方案:当公司代码未分配国家或未配置计税程序时,会导致增值税计算失败。处理方法:1)通过OX02检查公司代码国家字段;2)使用OBBG为国家分配计税程序(如TAXCN)。配置步骤:1)SPRO分配公司代码到国家;2)OBBG设置国家对应的计税程序。注意事项:历史数据需清理才能修改国家字段,不同账簿可配置不同计税程序。完成配置后即可正常处理含税凭证。

金牌架构师 560

C++调用C#的Dll

Qt是不能直接调用C#生成的dll,本文使用方法是将C#的编写的dll通过CLR编译成lib,首先需要在VS下添加一个组件,以VS2019为例,点击,打开以下页面,选择,勾选,等待工具下载完成。新建一个C#类库项目为做演示,只写了一个加法写好以后点击生成生成的dll文件等下会用得上首先新建一个CLR项目,命名位Cdll把C#生成的CSdll.dll复制到工程里来项目刚建好的页面如下,我们要做一些修改左边是修改好后的Cdll.h,,右边是上面写的C#代码。

Star_galaxy的博客 3448

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

本文提出将AdaFocalLoss损失函数应用于YOLO26模型优化,有效提升小目标检测性能。AdaFocalLoss通过目标尺寸感知机制和IoU引导的动态调节,自动调整训练权重和聚焦程度,解决了样本不平衡问题。相比传统损失函数,它无需手动调参,能增强训练稳定性,在多尺度、复杂场景下表现优异。文章详细介绍了AdaFocalLoss的原理、优势及实现方法,并提供了代码集成指南。实验表明该方法能显著提升检测精度和鲁棒性,特别适用于小目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 337

C++如何调用C#编写的DLL

由于C#编绎出来的DLL不是计算机所能直接识别的二进制指令码,需要CLS进行再解释,说到这,我想有些朋友应该知道C#项目需要引用C++编写的DLL时,可以直接引用DLLMPORT来实现调用,而反向的话,C++项目却不能简单靠引用来使用C#编写的DLL。由于C++项目默认配置是没有公共语言运行支持的,因此我们需要更改一些配置,来实现C++项目对C#编写DLL的调用。具体如何操作,我会在接下来的文章中

心在天涯----测试之路 1万+

华为OD机试真题 新系统2026-04-08 Python&JS 实现【配置操作失败数量统计】

模拟一个系统的命令行配置,包含添加、修改、删除三项操作,详情如下: 添加操作命令:add_rulerule_id=1rule_index = 18 修改操作命令: mod_rule rule_id= 1rule_index = 100 删除操作命令:del_rulerule_id=1

MISAYAONE的博客 588

(王道计算机组成原理)第二章数据的表示和运算-第四节:浮点数的表示与运算 3&4(数据的大小端和对齐存储)

本文主要介绍了计算机系统中两种重要的内存管理概念:大小端模式和内存对齐。大小端模式 涉及多字节数据在内存中的存储顺序,大端模式将最高有效字节存储在低地址,而小端模式则相反,将最低有效字节存储在低地址。现代计算机多采用小端模式,因其在处理运算时更为高效。内存对齐 则是为了提高数据访问效率,确保数据按特定边界(如2字节或4字节)存储,从而减少内存访问次数。虽然对齐可能增加内存占用,但通过空间换时间的方式显著提升了系统性能。

快乐江湖的博客 547

实现C++调用C#的动态库dll

在实际的项目过程中,有时会遇到在C++的项目中调用某个C#的dll来完成特定的某个功能,我们都知道,Native C++是没办法直接调用.NET平台的dll的。那有没有办法来做到这一点了?答案是肯定的。

zhuweisky 2791

微信小程序- 云开发上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。(小程序上传部署云函数提示错误,开发控制台中的云函数没有删除,详细排查)

微信小程序——云函数上传失败,微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。微信小程序上传云函数失败,微信小程序云开发|Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。微信云开发报错(Error: ResourceNotFound.FunctionName,微信小程序云函数报错,上传云函数 sum 失败 Error:,上传部署我们的云函数 2. 报错 错误信息

🏆 前端领域优质创作者 4319

在C#中调用C++写的DLL

这里两个问题,一是如何将C++编译成dll,二是在C++和C#中调用这个dll1,写C++的dll,参照以下link,它说的是C++中的dll调用,所以肯定成功http://msdn2.microsoft.com/en-us/library/ms235636(VS.80).aspx 2,写一个C#,调用上面写的dll2.1将以上的dll拷贝到debug/release目录,然后写C

veritasfx的专栏 1119

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c++调用c#写的DLL

c++调用c#写的DLL; 此文章演示了建立c#的dll; c++建立工程,引入dll; 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必须要在使用路径 #using "../bin/debug/xxx.dll" 1-建立c#的dll,过程略; 2.修改输出路径输出为 ../bin/debug; ../bin/release 方便c++可以定位找到 3.在解决方案添加C++工程,过程略 4.新添加的C++工程,引用DL...

biyusr的专栏 1084

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C#调用C++写的dll,C++调用C++的dll

C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工作.C++写的程序占用内存较小,直接对内存或者文件操作,因此一些关键的步骤或者一些最内层的循环在一定程序上还需要依赖C++.下面我做一些简单的例子第一步,用C++做一个可以导出函数的dll

佳泰生活 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# 调用C++写的dll

C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工作. C++写的程序占用内存较小,直接对内存或者文件操作,因此一些关键的步骤或者一些最内层的循环在一定程序上还需要依赖C++. 下面我做一些简单的例子 第一步,用C++做一个可以导出函数的dll

随风秀舞(diyoosjtu) 1604

VS2017中C#调用托管C++写的DLL

一、C#调用DLL的方式 C++写的DLL有托管的DLL和非托管的DLL。 托管代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。C#是典型的托管代码语言。 而非托管的代码对象有实际的内存地址,创建的对象必须要自己来管理和释放。如C和C++里的new、delete。 (一)调用非托管的DLL,主要采用静态方法调用: [DllImport(“”)] 但这种方式好像只能调用DLL中的方法,不能调用类。 (二)调用托管的DLL,如果是C#写的托管的dll,由C#来调用应该更简单些。今天记录下C#

zhangyajunna的博客 1668

C#调用C++写的DLL总结

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234 代码:平台VS2005 http://www.rayfile.com/zh-cn/files/f98c5c63-80c3-11e1-99a1-0015c55db73d/ 摘要:本文主要讲述如何在C#中逐步实现加载自己用 C++ 语言编写的动态链接库,以及在导入时如何进行 C# 和 C++

missingu1314的专栏 638

C#调用C++写的dll,返回字符串

C#调用C++写的dll,返回字符串 记录工作时自己遇到的一些问题 有两种方案: 一是C#传递一个ref参数给c++,在c++内把字符串拷贝到传进来的ref参数中。但这个方案有一个缺点:必须提前设置好字符串的长度。在字符串长度无法预估的情况下不好用。 二是把字符传作为返回值返回,本文采用第二种方案 提示:以下是本篇文章正文内容,下面案例可供参考 一、C++部分 代码如下(示例): wchar_t* __cdecl returnStr ( int argc,

Curekabu的博客 2544

如何用VB,C#调用C++写的DLL

之前在网上搜集了一些资料,现在稍微gkg

shejiannan的专栏 3884
上一篇: C#软件winform程序安装包制作及卸载程序制作
下一篇: Android常用组件
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值