__stdcall型dll转lib

    关于dll转lib文件的方法,网上的文章很多,但是我这次转的dll,输出函数是以 __stdcall 打头声明的。稍有不一样,顺便将网上的文章总结下。

转换环境

    VS2008

转换步骤

  • 打开 Visual Studio 2008 命令提示
  • 将<vs2008>\VC\bin 和 <vs2008>\Common7\IDE 加入到PATH路径:set PATH=%PATH%;<vs2008>\VC\bin;<vs2008>\Common7\IDE;
  • dumpbin /exports xxx.dll>xxx.def
  • 将xxx.def文件中以“ordinal hint RVA name”为表头的表中的 name 和 original 提取出来
  • 将xxx.def文件修改为如下:

LIBRARY "xxx"

EXPORTS

<function_name>@<total bytes of parameters>=<function_name> @<ordinal>

  • lib /def:xxx.def 可生成 xxx.lib文件

解释

__stdcall的函数,在声明extern "C" 时,导出的函数名类似这样:_func@16

  • 前面加 "_" (注意xxx.def文件中,这个下划线不要加,导出时会自动加上的)
  • func:函数名
  • 中间加 "@"
  • 16:函数的所有参数总共占用的字节数

注:不是__stdcall声明的dll,将上述文字中的红色部分去掉即可。

posted @ 2012-08-17 21:51  windtail  阅读(353)  评论(0编辑  收藏  举报