29 lines
938 B
Python
29 lines
938 B
Python
"""exports2def.py — 把 dumpbin /exports 的输出转成 .def(给 lib.exe 生成导入库用)。
|
|||
|
|
|
||
|
|
用法: python exports2def.py <exports.txt> <out.def> <LIBRARY名>
|
||
|
|
"""
|
||
|
|
import re
|
||
|
|
import sys
|
||
|
|
|
||
|
|
def main():
|
||
|
|
src, dst, libname = sys.argv[1], sys.argv[2], sys.argv[3]
|
||
|
|
names = set()
|
||
|
|
pat = re.compile(r"^\s+\d+\s+[0-9A-Fa-f]+\s+[0-9A-Fa-f]+\s+(\S+)")
|
||
|
|
with open(src, encoding="utf-8", errors="ignore") as f:
|
||
|
|
for line in f:
|
||
|
|
m = pat.match(line)
|
||
|
|
if m:
|
||
|
|
names.add(m.group(1))
|
||
|
|
if not names:
|
||
|
|
print("exports2def: 没解析出任何导出名", file=sys.stderr)
|
||
|
|
return 1
|
||
|
|
with open(dst, "w", encoding="ascii", newline="\r\n") as f:
|
||
|
|
f.write(f"LIBRARY {libname}\nEXPORTS\n")
|
||
|
|
for n in sorted(names):
|
||
|
|
f.write(n + "\n")
|
||
|
|
print(f"exports2def: {len(names)} 个导出 → {dst}")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
sys.exit(main())
|