怎么在C中使用DLL
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#pragma data_seg("sharehook")
HHOOK sharedata;
#pragma data_seg()
#pragma comment (linker,"/SECTION:sharehook,RWS")
LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam);
void SaveLog(char *n);
HINSTANCE hInce;
HHOOK myhook;
/*DLLIMPORT void ShellHook ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}*/
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
// sethook();
//sharedata=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0);
break;
case DLL_PROCESS_DETACH:
//unsethook();
//if( UnhookWindowsHookEx(sharedata))
//sharedata=NULL;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
DLLIMPORT int sethook()
{
if(myhook=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0))
{
sharedata=myhook;
return 1;
}
return 0;
}
DLLIMPORT int unsethook()
{
if( UnhookWindowsHookEx(sharedata))
{
myhook=NULL;
return 1;
}
else
return 0;
}
LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(sharedata)
{
if (nCode==HSHELL_WINDOWCREATED)
{
HWND hwm=(HWND)wParam;
char *strName;
strName=(char*)malloc(256);
GetWindowText(hwm,strName,256);
SaveLog(strName);
/*if (strName=="扫雷")
{
GetSafeHwnd(WM_CLOSE,0,0);
}*/
}
}
return CallNextHookEx(myhook,nCode,wParam,lParam ) ;
}
void SaveLog(char *n)
{
//char *name=n;
FILE *log;
struct tm *systime;
time_t t;
t=time(NULL);
systime=localtime(&t);
if((log=fopen("syslog.log","a+"))==NULL)
exit(1);
else
fprintf(log,"open %s at %5d%5d%5d%5d%5d%5d",n,systime->tm_year,systime->tm_mon,systime->tm_mday,systime->tm_hour,systime->tm_min,systime->tm_sec);
fclose(log);
}
这是编译生成DLL的源程序,目的是设置全局的shell钩子
但不知道在其它的程序中怎么用编译连接好的DLL
有哪位可以帮帮我啊!!!!!!!!
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#pragma data_seg("sharehook")
HHOOK sharedata;
#pragma data_seg()
#pragma comment (linker,"/SECTION:sharehook,RWS")
LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam);
void SaveLog(char *n);
HINSTANCE hInce;
HHOOK myhook;
/*DLLIMPORT void ShellHook ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}*/
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
// sethook();
//sharedata=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0);
break;
case DLL_PROCESS_DETACH:
//unsethook();
//if( UnhookWindowsHookEx(sharedata))
//sharedata=NULL;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
DLLIMPORT int sethook()
{
if(myhook=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0))
{
sharedata=myhook;
return 1;
}
return 0;
}
DLLIMPORT int unsethook()
{
if( UnhookWindowsHookEx(sharedata))
{
myhook=NULL;
return 1;
}
else
return 0;
}
LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(sharedata)
{
if (nCode==HSHELL_WINDOWCREATED)
{
HWND hwm=(HWND)wParam;
char *strName;
strName=(char*)malloc(256);
GetWindowText(hwm,strName,256);
SaveLog(strName);
/*if (strName=="扫雷")
{
GetSafeHwnd(WM_CLOSE,0,0);
}*/
}
}
return CallNextHookEx(myhook,nCode,wParam,lParam ) ;
}
void SaveLog(char *n)
{
//char *name=n;
FILE *log;
struct tm *systime;
time_t t;
t=time(NULL);
systime=localtime(&t);
if((log=fopen("syslog.log","a+"))==NULL)
exit(1);
else
fprintf(log,"open %s at %5d%5d%5d%5d%5d%5d",n,systime->tm_year,systime->tm_mon,systime->tm_mday,systime->tm_hour,systime->tm_min,systime->tm_sec);
fclose(log);
}
这是编译生成DLL的源程序,目的是设置全局的shell钩子
但不知道在其它的程序中怎么用编译连接好的DLL
有哪位可以帮帮我啊!!!!!!!!
...全文
相关推荐
C语言创建DLL,并在C中调用DLL
掌握这些知识点可以帮助开发者更好地使用DLL文件,提高应用程序的性能和可维护性。
C语言生成调用DLL
一、生成DLL文件 生成DLL文件需要用到两个文件,一个头文件,dll.h,和一个源文件,dll.c头文件dll.h内容: #ifndef _DLL_DEMO_H_ #define _DLL_DEMO_H_ #ifdef DLLDEMO_EXPORTS #define DLL_DEMO _declspec( dllexport ) #else #d
C语言调用DLL
本文将深入探讨如何使用C语言调用DLL,并结合提供的两个压缩包文件`MyDll3.rar`和`CallDll.rar`进行实例解析。首先,我们需要了解DLL的工作原理。
安卓调用C的DLL
注意事项: - 请确保DLL中的函数名与SO中的函数名一致,因为C语言的函数名在链接时会被转换为“mangled name”,需要进行名称修饰或使用`extern "C"`避免。
C编写dll及调用C编写dll及调用
C语言是系统级编程的常用工具,它可以用来创建DLL,供其他C或非C语言的应用程序调用。本篇文章将详细探讨如何使用C语言编写DLL以及如何在C语言程序中调用这些DLL。


