其实题目只是部分问题,问题如下:
1. typedef int (_cdecl *MyFunc)(int,int);
HMODULE hModule=::LoadLibrary("fafDll.dll");
MyFunc GetValue=(MyFunc)GetProcAddress(hModule,"getMaxCommDiv");
ires=GetValue(m,n);
我知道,typedef int (_cdecl *MyFunc)(int,int);这句定义的句子是定义函数指针,但是我记得好像不是像red字这么用的,能不能给我解释下?我记得好像定义了函数指针,如a是函数指针,函数是max(int b),直接a=max;然后a(int b);函数指针就直接能当作是函数名这样用的,但是,这里为什么用函数指针再定义了MyFunc GetValue,那这个GetValue算是什么?能不能哪位大侠解释一下?2.dll动态链接库不是有3种吗?我想如果写能够注入的dll
,就是能够注入explorer.exe,能够让所有的exe都被注入的dll,应该用那一种dll写?应该不是用mfc扩展的写吧?3.不是很懂规则dll和MFC扩展dll的更本差别,一般如果你要扩展mfc的某个类,就用MFC扩展dll写,但是常规dll不是能使用mfc的吗,用它继承mfc的某个类,然后再扩展不可以吗?但是书上说不可以的,我想知道为什么,谢谢。
1. typedef int (_cdecl *MyFunc)(int,int);
HMODULE hModule=::LoadLibrary("fafDll.dll");
MyFunc GetValue=(MyFunc)GetProcAddress(hModule,"getMaxCommDiv");
ires=GetValue(m,n);
我知道,typedef int (_cdecl *MyFunc)(int,int);这句定义的句子是定义函数指针,但是我记得好像不是像red字这么用的,能不能给我解释下?我记得好像定义了函数指针,如a是函数指针,函数是max(int b),直接a=max;然后a(int b);函数指针就直接能当作是函数名这样用的,但是,这里为什么用函数指针再定义了MyFunc GetValue,那这个GetValue算是什么?能不能哪位大侠解释一下?2.dll动态链接库不是有3种吗?我想如果写能够注入的dll
,就是能够注入explorer.exe,能够让所有的exe都被注入的dll,应该用那一种dll写?应该不是用mfc扩展的写吧?3.不是很懂规则dll和MFC扩展dll的更本差别,一般如果你要扩展mfc的某个类,就用MFC扩展dll写,但是常规dll不是能使用mfc的吗,用它继承mfc的某个类,然后再扩展不可以吗?但是书上说不可以的,我想知道为什么,谢谢。
解决方案 »
- vc使用com调用matlab出问题
- 窗口注册后不能显示菜单,无法结束(不知道该怎么表达了)在线等
- 海康威视视频采集卡DS-4000HC的二次开发
- char [] 和 char * 之间如何转换
- 请问我txt文件坐标如何在在view显示
- 打算在对话框设为焦点的时候,按回车,执行相关操作,如何处理
- 求助:我在 .cpp 文件里定义了下面的两个宏,可是编译时提示下面的错误,谢谢!
- 这个报错该怎么解决
- 我的程序的title栏是“MyApp - 无标题”,我想让我的程序的title栏只有“MyApp”,怎么把后面的东西去掉呢?
- 如何擦除对话框上的位图,或者动态的用背景色填充一块矩形区域
- 怎么播放 G.722 编码格式的音频数据文件,急...在线等待
- 通过读相关的寄存器获取主机硬盘的物理序列号
========================
这里定义的MyFunc这个是一种函数指针类型,下在MyFunc GetValue相当于是变量定义。
2.一种注入用的DLL用普通的win32 dll多一些
3第三个问题你看这个链接http://tech.163.com/06/0316/10/2CB2S3HP0009159F.html
2.不知道你说的win32 dll是指什么,在vc里面,有这么一说吗?
就像 typedef int MyInt; 一样将MyFunc定义为一种类型.
MyFunc GetValue; 就是定一个MyFunc类型的变量.2. win32 dll就是不使用MFC的dll. 功能上2种dll没什么大的区别,当然win32 dll要使用MFC库就比较麻烦,所以要使用MFC的话最好创建MFC 扩展dll.3. 上面已经说了, 区别就像自写win32程序和mfc程序差不多. win32 dll可以方便地自定义dll入口函数,这个在注入其他程序的时候比较有用.
hCaoZuoYuanCX_Dll=LoadLibrary("../XTYHGL/Debug/XTYHGL.dll");
if (NULL==hCaoZuoYuanCX_Dll)
{
MessageBox("load dll failed!");
// return FALSE;
}
typedef void(_stdcall *pFunShowDlg)(CString);
pFunShowDlg pShowDlg;
pShowDlg=(pFunShowDlg)GetProcAddress(hCaoZuoYuanCX_Dll,"ShowXTYHGLDlg");
if (NULL==pShowDlg)
{
MessageBox("Function load failed!");
// return FALSE;
}
CString strSQL;
strSQL.Format("driver={SQL Server};Server=127.0.0.1;DATABASE=cljkdb;uid=sa;pwd=");
pShowDlg(strSQL);
FreeLibrary(hCaoZuoYuanCX_Dll);以上是我加载dll的方法,希望能对你有帮助
====================
含糊吗?我觉得很清楚了,typedef int (_cdecl *MyFunc)(int,int); 这里是声明一种函数指针类型,类型名是MyFunc,就像你写typedef int Integer一样,定义了一个类型之后,可以用这个类型来声明变量了。
第二个问题我觉得也很清楚,DLL一般有三种,一种是win32 dll,就是最普通的DLL,一般用SDK来写,不用MFC。除这个之外就是规则dll和MFC扩展dll了。一般我们在做进程注入时,MFC用的不多,所以多用这种DLL。
更好 因为他是语言无关的,甚至脚本语言都可以调用 它提供的接口。
MFC扩展dll内外都可以用MFC
也就是我mfc的程序,无法调用使用了MFC的规则dll?
如果不用com技术能实现的话,比较好,因为com不比MFC好学