我想知道我是否可以使用现有的Windows DLL和静态链接动态链接的文件?
我看到许多项目都是用Linux / elf来完成的 http://magicermine.com/ http://statifier.sourceforge.net/ http://bitwagon.com/jumpstart/jumpstart.html
我想这很可能是不可能的,但是我在WinPE中遇到了一些问题,当我静态链接DLL时,一切都开始变得很好。
我没有现有DLL的源代码。
我想我可以创建一个暴露所有相同函数和静态链接的传递DLL吗?
答案 0 :(得分:1)
没有工具支持静态链接DLL的代码。
问题是DLL是一个完整的Windows PE可执行文件,而不是任何意义上的C或C ++“库”。 C ++标准只有一个语句模糊地支持类似于DLL的东西(在main
的第一个语句之后的动态初始化中。你运气不好。
但是如果您有源代码(例如使用MFC),而您说没有,那么您可以创建静态库。
请注意,已经 意味着“静态链接”DLL,即加载它并自动解析其功能。
这是使用DLL的常用方法。
与显式加载动态并使用GetProcAddress
解析其功能形成鲜明对比。
关于
“当我静态链接DLL时,一切都开始运行良好
大概早些时候你已经明确地动态地加载了DLL,并且使用了GetProcAddress
,并且大概有些东西没有完美地运行。
GetProcAddress
的一个主要问题是它假定提供的函数名称被编码为Windows ANSI(由GetACP
报告的机器相关编码),然后(显然)将其转换为UTF -8用于函数查找。
一种解决方法可能是按顺序而不是名称访问该功能。
使用Microsoft工具查找序数的一种方法是使用dumpbin /exports
。