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

对于很多和我一样的老C++程序员来讲,如果不能与时俱进,不但会倍感失落,还会真的自绝于天下。
    比如C#有很多好的组件, 如NPOI ,如。。。,怎么在C++中也自如调用呢,这样不用去学习C#,不用换刀,也可以达到同样的目的。
网上看了半天,找到的资料要么太老,要么不对,干脆自己调试一遍。下面把体会说一说。
调试环境:visual studio 2010 .
时间:2012.12.20

一、C#写的类库:


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

namespace ClassLibrary1
{
      public classClass1
      {
              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 namespaceClassLibrary1;                        //声明命名空间,非必须
int _tmain(int argc, _TCHAR* argv[])
{
      printf("hello world");

      ClassLibrary1::Class1 ^c = gcnewClassLibrary1::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();
     
      return0;
}
(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 VisualStudio.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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值