首页 > 代码库 > 2015.3.2 VC++6制作非MFC dll以及VS2005、VS2010调用
2015.3.2 VC++6制作非MFC dll以及VS2005、VS2010调用
1、在VC6中新建工程,选择Win32 Dynamic-Link Libary,输入dll名称如 DLL2015
2、在类型选择中,选择第2项 A Simple Dll project OK
3、随后系统会生成简单的框架,如下:
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
return TRUE;
}
4、在#include "stdafx.h"后加一行,引入函数名称:
extern "C" __declspec(dllexport) int fun(int a, int b);
5、在文件末尾添加函数主体
int fun(int a,int b)
{
return a+b;
}
6、完整的代码:
#include "stdafx.h"
extern "C" __declspec(dllexport) int fun(int a, int b);
BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
int fun(int a,int b)
{
return a+b;
}
7、VS2005、VS2010中调用:
1、VS2005或VS2010须设置成x86模式(有待核实,2015.5.9证实,确实需要将主体设为X86模式)
2、将dll考入exe文件目录下(不用,可在[DllImport("DLL2015.dll")]时把完整路径添加进来)
3、如果直接用引用-浏览方式添加dll可能会出现提示dll非法,不让添加的情况
4、不用引用,直接在程序中写
[DllImport("DLL2015.dll")]
public static extern int fun(int a,int b);
5、在需要调用的地方直接写 int k=fun(5,8);即可返回结果
6、有可能会提示堆栈不对称,签名不匹配的错误。可能的原因是VS中的变量与VC中的参数类型不匹配造成。此时如果找不到合适的参数类型,引入时增加一个参数CallingConvention就能解决问题。
[DllImport("DLL2015.dll", CallingConvention = CallingConvention.Cdecl)]
2015.3.2 VC++6制作非MFC dll以及VS2005、VS2010调用