测试环境为win7 64位、Visual Studio 2010 C++
1、先下载最新的Depends.exe,查看导出函数的函数名
例如,手上有一个第三方的动态库”LEDPanel“,打开“LEDPanel.dll“,可以看到如下的函数名
??0CNH50R@@QAE@XZ
??1CNH50R@@QAE@XZ
?ConnectServer@CNH50R@@QAEKQB_WG@Z
?DelList@CNH50R@@QAEKXZ
?DisconnectServer@CNH50R@@QAEKXZ
?Display@CNH50R@@QAEKQB_W_NDDDDDDDDD@Z
?SendToServer@CNH50R@@QAEKQBDH@Z
?SetList@CNH50R@@QAEKXZ
点击”View“->”Undecorate C++ Functions“即可查看到函数的原型
CNH50R::CNH50R(void)
unsigned long CNH50R::ConnectServer(wchar_t const * const,unsigned short)
unsigned long CNH50R::DelList(void)
unsigned long CNH50R::DisconnectServer(void)
unsigned long CNH50R::Display(wchar_t const * const,bool,char,char,char,char,char,char,char,char,char)
unsigned long CNH50R::SendToServer(char const * const,int)
unsigned long CNH50R::SetList(void)
CNH50R::~CNH50R(void)
2、执行dumpbin.exe /EXPORTS LEDPanel.dll>LEDPanel.def
在当前目录下生成了一个def文件,里面的内容如下:
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file LEDPanel.dll

File Type: DLL

  Section contains the following exports for LEDPanel.dll

    00000000 characteristics
    5192F72E time date stamp Wed May 15 10:47:10 2013
        0.00 version
           1 ordinal base
           8 number of functions
           8 number of names

    ordinal hint RVA      name

          1    0 00001010 ??0CNH50R@@QAE@XZ
          2    1 00001070 ??1CNH50R@@QAE@XZ
          3    2 000010B0 ?ConnectServer@CNH50R@@QAEKQB_WG@Z
          4    3 000012C0 ?DelList@CNH50R@@QAEKXZ
          5    4 00001200 ?DisconnectServer@CNH50R@@QAEKXZ
          6    5 00001320 ?Display@CNH50R@@QAEKQB_W_NDDDDDDDDD@Z
          7    6 00001540 ?SendToServer@CNH50R@@QAEKQBDH@Z
          8    7 00001230 ?SetList@CNH50R@@QAEKXZ

  Summary

        1000 .data
        1000 .rdata
        1000 .reloc
        1000 .rsrc
        1000 .text

3、编辑这个def文件,删掉没用的信息,将它整理成这样的格式 :
LIBRARY    "LEDPanel"
EXPORTS
??0CNH50R@@QAE@XZ    @1
??1CNH50R@@QAE@XZ    @2
?ConnectServer@CNH50R@@QAEKQB_WG@Z    @3
?DelList@CNH50R@@QAEKXZ    @4
?DisconnectServer@CNH50R@@QAEKXZ    @5
?Display@CNH50R@@QAEKQB_W_NDDDDDDDDD@Z    @6
?SendToServer@CNH50R@@QAEKQBDH@Z    @7
?SetList@CNH50R@@QAEKXZ    @8
上面的@1和@2是根据第1个步骤中的ordinal序号来的

4、运行lib.exe /def:LEDPanel.def
生成了LEDPanel.lib和LEDPanel.exp文件。这个lib文件就可以在VC里用了,
比如这样     #pragma comment(lib,"LEDPanel.lib")

5、新建一个文件LEDPanel.h,里面新建一个导出类和加入第一步中看到成员函数,内容如下:
class __declspec(dllimport) CNH50R
{
    public:    ~CNH50R(void);
    public:    CNH50R(void);
    public:    unsigned long ConnectServer(wchar_t const * const,unsigned short);
    public:    unsigned long DelList(void);
    public:    unsigned long DisconnectServer(void);
    public:    unsigned long Display(wchar_t const * const,bool,char,char,char,char,char,char,char,char,char);
    public:    unsigned long SendToServer(char const * const,int);
    public:    unsigned long SetList(void);
};


注意:本文归作者所有,未经作者允许,不得转载