如何利用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/
由于项目的需要,将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/