你应该想办法找到DLL对应的LIB,然后从LIB中的函数名来慢慢分析,可能要你自己弄个DLL,写个空的相应的函数,然后一步步试着改变参数,直到函数名完全一至为止(这种方法不适用于以标准C的命名方式导出的函数,如果你对C++的内部命名规则比较了解的话,就快多了,另外,各种C++系统的内部命名规则不同)

解决方案 »

  1.   

    没有任何办法。除非:
    1。找到源程序,我是指包含DLL引出函数声明的头文件;
    2。反汇编,跟踪代码,看它到底用了几个参数(这个好办,一般STDCALL的函数只看看最后的ret n指令就知道了)以及每个参数到底是干什么的(这个嘛,对于稍微复杂一点的函数,几乎是不可能的)。
    3。根据函数名,猜。
    如果第一个办法不行,你就绝望吧——因为第二个办法只是理论上的,实际操作起来恐怕不可能。第三个办法?危险……
      

  2.   

    如果是 mfc 扩展 dll(导出类的)
    用 dumpbin.exe 取得 dll 信息,写成 def 文件,再用 lib.exe 生成 lib 文件
    lib 中带有 c++ 规则的导出函数,然后写出头文件就可以了。如果的普通的 dll 
    用 dumpbin.exe 取得 dll 信息,并且反汇编,根据函数的入口地址分析寄存器,调用栈取得参数信息
      

  3.   

    dll --> liblib /MACHINE:IX86 /DEF:test.def
      

  4.   

    用win32dasm可以将它反汇编,但具体每个参数的含义,还是要你自己阅读机器代码
      

  5.   

    gboy(boy) 
    lib 中带有 c++ 规则的导出函数,然后写出头文件就可以了。
    请说详细些。谢谢!
      

  6.   

    在 def 文件中有所有的导入/导出类名和成员函数(包括参数类型)
    (没有数据成员名称和构造/析够函数) 
    like this:
    (由于名字分裂,所以有点乱,不过应该可以看懂)
    ;导出的类
    ??0CLogin@@QAE@ABV0@@Z
    ??0CLogin@@QAE@XZ
    ??1CDepartmentSet@@UAE@XZ
    ??1CGroupRightSet@@UAE@XZ
    ??1CGroupSet@@UAE@XZ
    ??1CLogin@@UAE@XZ
    ??1CUserSet@@UAE@XZ
    ??4CLogin@@QAEAAV0@ABV0@@Z
    ??_7CLogin@@6B@
    ??_FCDepartmentSet@@QAEXXZ
    ??_FCGroupRightSet@@QAEXXZ
    ??_FCGroupSet@@QAEXXZ
    ??_FCUserSet@@QAEXXZ;导出的成员函数@类(没有任何导出函数信息的可能是导入的类(猜的))
    ?HaveRight@CLogin@@AAEHVCString@@@Z
    ?Login@CLogin@@QAEHI@Z
    ?ModifyPassword@CLogin@@QAEXXZ
    ?UserLogin@CLogin@@AAEHXZ可以写出最简单的头文件
    class CLogin
    {
    public:
    CLogin();
    ~CLogin();
    UserLogin(CString); // 没有返回值得信息,不过不会影响调用(可以根据反汇编取得反回值)
    ...
    }