其实题目只是部分问题,问题如下:
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.   

    1. typedef int (_cdecl *MyFunc)(int,int); 
    ========================
    这里定义的MyFunc这个是一种函数指针类型,下在MyFunc GetValue相当于是变量定义。
    2.一种注入用的DLL用普通的win32 dll多一些
    3第三个问题你看这个链接http://tech.163.com/06/0316/10/2CB2S3HP0009159F.html
      

  2.   

    楼上说的很含糊啊,对于第一个问题。
    2.不知道你说的win32 dll是指什么,在vc里面,有这么一说吗?
      

  3.   

    1.typedef int (_cdecl *MyFunc)(int,int); 
    就像 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入口函数,这个在注入其他程序的时候比较有用.
      

  4.   

    想问问,怎么像qq一样,把一整个完整的,有界面的程序,封装到dll中?而且还是通过rundll32.exe来运行?很神奇的感觉。我也在学习dll,但是只能导出函数,导出类,导出对象和对话框,而且导出对话框必须要是静态链编才行,哪能想qq的camera一样,rundll就可以把它运行起来了,并且还是有界面的完整程序? 
      

  5.   

    HINSTANCE hCaoZuoYuanCX_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的方法,希望能对你有帮助
      

  6.   

    楼上说的很含糊啊,对于第一个问题。
    ====================
    含糊吗?我觉得很清楚了,typedef int (_cdecl *MyFunc)(int,int); 这里是声明一种函数指针类型,类型名是MyFunc,就像你写typedef int Integer一样,定义了一个类型之后,可以用这个类型来声明变量了。
    第二个问题我觉得也很清楚,DLL一般有三种,一种是win32 dll,就是最普通的DLL,一般用SDK来写,不用MFC。除这个之外就是规则dll和MFC扩展dll了。一般我们在做进程注入时,MFC用的不多,所以多用这种DLL。
      

  7.   

    看看 MFC ActiveX控件 或ATL 开发ActiveX控件相关的质料吧。这种DLL是基于COM技术的 要比普通DLL
    更好 因为他是语言无关的,甚至脚本语言都可以调用 它提供的接口。
      

  8.   

    规则dll其内部可以使用MFC但它的对外接口不能用MFC
    MFC扩展dll内外都可以用MFC
      

  9.   

    从dll导出的函数只是导出了它的入口地址,系统并不知道应该什么样的参数列表及返回值,所以要先声明一下。
      

  10.   


    也就是我mfc的程序,无法调用使用了MFC的规则dll?
      

  11.   


    如果不用com技术能实现的话,比较好,因为com不比MFC好学