在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
class Class1
   
{
        public String
Name
       
{
           
get;
           
set;
       
}
        public void
helloWorld()
       
{
           
Console.WriteLine("hello world!");
       
}

    }
}

// C#程序配置,一定是类库
在C++ 中 如何调用 C# 写的DLL(转载)

在C++ 中 如何调用 C# 写的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++ 中 如何调用 C# 写的DLL(转载)


在C++ 中 如何调用 C# 写的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!