无论调用win32.dll还是mfc.dll基本过程都是一样的
下面以CALLmfcdll的C#项目调用VC++编写的MFCDLL项目为例
1、在MFCDLL.h中加上
extern "C" __declspec(dllexport) int add(int x,int y);//导出函数
2、在MFCDLL.cpp中加上
extern "C" __declspec(dllexport) int add(int x,int y)
{
//focus=100;
return x+y;
}
3、更改dll的输出目录
MFCDLL属性页-->配置属性-->常规-->输出目录,编辑为CALLmfcdll的deug路径,这样点击生成MFCDLL,在debug文件夹下就有MFCDLL.dll、MFCDLL.lib等文件了
4、在CALLmfcdll中新建一个类专门用于调用dll,如CallDllFunction.cs
在CallDllFunction.cs中加上
using System.Runtime.InteropServices;
......
......
//导出函数
[DllImport("MFCDLL.dll", EntryPoint = "add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int x, int y);
5、最后就可以通过 类似“CallDllFunction.add(10, 20);”的形式调用dll中的方法了
最后可以参考
VC++ MFC DLL动态链接库编写详解
http://liyanblog.cn/articles/2012/09/17/1347848492579.html
一般编写dll中导出函数最常用 _declspec(dllexport) int MyFunction(int);
Win32DLL,MFC常规DLL和MFC拓展DLL:
Win32DLL使用的是Win32的API实现的,只能导出函数,能被各种应用程序调用,适用范围最广。
MFC常规DLL是适用MFC创建的,就像MFC程序跟Win32程序的关系一样,MFC常规DLL和Win32DLL的关系也是如此。它使用MFC的机制,只能导出标准C函数。如此,它便可以被大部分Win32程序调用。
MFC拓展DLL也也使用的是MFC机制创建的,相比于MFC常规DLL,拓展DLL可以导出C++类和MFC派生类,如此扩大了DLL的接口范围。此长彼消,MFC拓展DLL的适用范围较小,只能被MFC程序调用。因为它导出的不只是函数,还有C++类和MFC派生类。
当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。