即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

c++调用c#dll

编程语言 a2311minghan 18℃ 0评论

1、系统选择一致 32位or64位

2、.NET一致。

3、公共语言支持clr


调用步骤

1、

#using “MESVenderDBInterface.dll”           //引用C#类库

using namespace System;


using namespace Compal;                // 声明命名空间,非必须

2、

MESVenderDBInterface::DBAgent ^pDBdll=gcnew MESVenderDBInterface::DBAgent();


System::String ^strYN;


System::String ^strCodel=gcnew String(m_strSN);


strYN=pDBdll->Execute(strCodel);


strReturn = (CString)strYN;//把string数据转回Cstring



具体步骤

一、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” height=”533″ name=”image_operate_10371355994118697″ src=”http://static.shenjianshou.cn/image/504221-91a25008ac81f47adf0c246350fcea5f” style=”margin:0px; padding:0px; border:0px; list-style:none” title=”在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL” width=”690″></img></a><br style=












二、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” height=”440″ name=”image_operate_97231355994063788″ src=”http://static.shenjianshou.cn/image/504221-ead419d4ed3f615bc8ef624e5d64ff63″ style=”margin:0px; padding:0px; border:0px; list-style:none” title=”在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL” width=”690″></img></a><br style=










三、如果还有疑问,请参考 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 定义。

转载请注明:CodingBlog » c++调用c#dll

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情