C#调用dll 小例子

无论调用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 函数。这两种链接方法是加载时动态链接和运行时动态链接。

 

posted @ 2015-09-03 15:14  ITtang  阅读(1676)  评论(0编辑  收藏  举报