如何利用MFC编写的.exe调用C#编写的dll动态库

来源:互联网 发布:爱淘宝红包领取 编辑:程序博客网 时间:2024/04/28 20:11
如何利用MFC编写的.exe调用C#编写的dll动态库
    由于项目的需要,将C#编写的dll动态库运用到MFC编写的.exe程序中,具体运用步骤如下所示:


一、使用/clr方式来编译MFC文件,具体操作主要是更改MFC所在的项目属性:
    1、打开“项目属性”对话框,方法是右键单击“解决方案资源管理器”中的项目并选择“属性”。


    2、展开“配置属性”旁边的节点并选择“常规”。在右侧窗格中的“项目默认值”下,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。


    3、在相同的窗格中,确保将“MFC 的使用”设置为“在共享 DLL 中使用 MFC”。


    4、在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。请确保将“调试信息格式”设置为“程序数据库 /Zi”(而不是“/ZI”)。


    5、在“配置属性”下,选择“C/C++”,然后选择“代码生成”。请确保将“运行时库”设置为“多线程调试 DLL (/MDd)”或“多线程 DLL (/MD)”之一。


二、在MFC所在的头文件中加载相应的动态库


    #using <mscorlib.dll>
    #using "DownloaFiles.dll" //换成需要的DownloaFiles.dll文件


    using namespace System;(如果System版本太低,可以直接用名称空间限定 System::IServiceProvider或将该句注释掉


    using namespace ADMessage_test;//换成dll中类所使用的ADMessage_test  (namespace)


三、在调用dll中的API之前,需要在函数调用之前加入#pragma managed


四、使用C#动态库的类时,不可以用MFC中的方式进行调用,而是需要使用C++/clr语法,采用正确的访问托管对象,如:


      Class1 ^c = gcnew Class1();


      c->Name = "zzj";


      printf("%s/n", c->Name);


      其中,Class1 是C#动态库所定义的类。


五、以下几点需要注意


    1.在加载C#生成的dll动态库时,不能使用MFC的#include方式,而是采用#using方式来引用C# 的DLL动态库。


    2.一般C#都是使用名字空间模式,所以在引用动态库成功后必须使用using namespace ADMessage_test;


    3.由于使用的是C++/clr语法,所以应该采用正确的访问托管对象,即:使用帽子'^',而不是星星'*'。


网上的Demo网址:http://blog.163.com/xiao_caoo/blog/static/372276662012718113022795/




0 0