511遇见网站最近在录制一套易语言编写DLL及调用和Hook,今天记录一下使用VS编写一个C++的Dll,易语言来调用。
步骤:
1、启动VS
2、创建工程
3、Visual C++ -----Win32 Console Application
4、选择DLL
5、自动创建几个文件
6、dllmain.cpp代码:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符); ul_reason_for_call是一个说明动态库被调原因的标志,当进程或线程装入或卸载动态链接库的时候,操作系统调用入口函数,并说明动态链接库被调用的原因,它所有的可能值为:DLL_PROCESS_ATTACH: 进程被调用、DLL_THREAD_ATTACH: 线程被调用、DLL_PROCESS_DETACH: 进程被停止、DLL_THREAD_DETACH: 线程被停止;lpReserved为保留参数。
7、在dllmain.cpp最后添加
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec(dllexport) int _stdcall add(int a, int b)
{
return (a + b);
}
extern "C" __declspec(dllexport)int _stdcall sub(int a, int b)
{
return (a - b);
}
8、点击生成编译生成一个Win32Project1.dll.(默认工程名称,可以创建时或创建后修改)
易语言调用:
1、插入 DLL命令
.版本 2
.DLL命令 add, 整数型, "Win32Project1.dll", "_add@8"
.参数 x, 整数型
.参数 y, 整数型
DLL堆栈出错解决办法