1 VS->win32console->dll 空项目 ex->完成
创建一个ex.c文件
__declspec
(
dllexport
)
int
myadd(
int
a,
int
b){
return
a + b;
}
编译
此时会生成 ex.lib ex.dll两个文件(在debug文件夹中)
关闭项目
2 新建win32console exe 项目im
新建一个im.c文件
#include<stdio.h>
#pragma comment(lib,"ex.lib")
int
myadd(
int
a,
int
b);
//__declspec( dllimport ) int
myadd(
int
a,
int
b); //上句用这种方式也可以
int
main(){
printf
(
"调用动态dll函数的结果:%d"
,myadd(5,6));
getchar
();
return
0;
}
此时无法编译 还缺少lib文件
将文件ex.lib放入 im\im中 当编译完成后 ex.lib即完成使命
此时还无法运行 缺少dll文件
将ex.dll放在与exe 同一个文件夹
编译
完成(随时可运行)
如果运行exe提示dll文件丢失 找到dll文件后,在环境变量中添加路径即可
==============================================================
将自己的程序注入的方法
在dll中
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
//DLL被加载到内存时
case DLL_PROCESS_ATTACH:
{
//........其他功能代码
Beep(1000,1000); //经测试 被调用时会响
break;
}
//进程中有线程创建时
case DLL_THREAD_ATTACH:
{
//........其他功能代码
break;
}
//线程正常退出时
case DLL_THREAD_DETACH:
{
//........其他功能代码
break;
}
//动态链接库被卸载时
case DLL_PROCESS_DETACH:
{
//........其他功能代码
break;
}
default:break;
}
return TRUE;
}