测试环境为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);
};
注意:本文归作者所有,未经作者允许,不得转载