在C++ 中 如何调用 C# 写的DLL(转载)

摘要:
对于很多和我一样的老C++程序员来讲,如果不能与时俱进,不但会倍感失落,还会真的自绝于天下。比如C#有很多好的组件,如NPOI,如。。。,怎么在C++中也自如调用呢,这样不用去学习C#,不用换刀,也可以达到同样的目的。调试环境:visualstudio2010.时间:2012.12.20一、C#写的类库:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceClassLibrary1{publicclassClass1{publicStringName{get;set;}publicvoidhelloWorld(){Console.WriteLine("helloworld!");}}}//C#程序配置,一定是类库二、C++程序共有三个程序文件主程序//test1.cpp:定义控制台应用程序的入口点。希望关心上述主题的朋友能够如愿以偿,GOODLUCK!

对于很多和我一样的老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
"..ClassLibrary1inDebugClassLibrary1.dll"
//引用C#类库
using namespace ClassLibrary1;
// 声明命名空间,非必须
int _tmain(int argc,
_TCHAR* argv[])
{
printf("hello
world");
ClassLibrary1::Class1 ^c = gcnew
ClassLibrary1::Class1(); //注意一定要用 ^ ,
一定要用gcnew
c->Name =
" xignxianghong";
printf("%s ",
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(转载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HBase统计表行数(RowCount)的四种方法SqlServer Alwayson 搭建排错记录(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# AS与Is

在C#中,所有的东西都是对象。因此任何常数也是一个整型对象。这里用到了as,as是C#语言里面的一个关键字。as运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:expression as type as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应...

在mac环境下用c#进行SDL2游戏开发

虽然笔者是在Rider下实现的,不过VS下也是可以用的 最近为了折腾这SDL2,可是废了点时间,尝试用C/C++/Go/C#进行开发,结果发现: C/C++环境好设置,但是cmake配置麻烦(对于没用过的我来说),而且我受够了引入文件总要include Go最省心,go mod包管理永远的神!sdl2库的api封装也是用起来最舒服的 C#在windows...

十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)

1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 13 INT1(上划线) 外部中断1 P3.4 14 T0 定时器/计数器0 外部输入端 P3.5 15 T1 定时器/计数器1...

2019面试宝典之.Net

  1、简述 private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 当前程序集内可以访问。 2、ADO.NET中的五个主要...

C语言使用正则表达式

http://blog.chinaunix.net/uid-479984-id-2114941.html C语言使用正则表达式 据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深 有感触。很多语言都支持RE,用的最多...

推荐一些C#相关的网站、资源和书籍 (转载自http://www.cnblogs.com/jiangxiaofan/p/3808316.html)

推荐一些C#相关的网站、资源和书籍 (转载自http://blog.csdn.net/chinacsharper/article/details/17514923)   一、网站 1、http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方。那里有API开发文档,还有各种代码、资源下载。 2、http://...