gee*_*eko 18 dll linker explicit implicit
我想知道为什么链接器不能简单地通过查询获得实际实现代码的实际.dll文件中的信息来完成它们的工作?我的意思是为什么链接器仍然需要.lib文件来进行隐式链接?
不是这种链接的导出和相对地址表足够吗?
无论如何,只使用.dll而没有.lib存根/代理文件的人可以进行隐式链接?
我认为Windows可执行加载器只是代表程序执行LoadLibrary/LoadLibraryEx调用(因此名称隐式链接),这是显式链接的主要区别.如果这是真的,那么在没有.lib的情况下明确地执行它应该表明它是可行的,如果没有隐式,对吧?或者我只是说非感觉?
任何帮助表示赞赏,非常感谢:)
geeko
我可以想到几个原因.
我不知道有任何方法只使用DLL隐式链接 - 快速搜索显示了几个工具,但我没有使用它们中的任何一个.
在这种情况下,我将创建一个单独的源文件,其中包含您需要使用的函数,并动态加载DLL并根据需要绑定它们.例如:
// using global variables and no-error handling for brevity.
HINSTANCE theDll = NULL;
typedef void (__stdcall * FooPtr)();
FooPtr pfnFoo = NULL;
INIT_ONCE initOnce;
BOOL CALLBACK BindDLL(PINIT_ONCE initOnce, PVOID parameter, PVOID context)
{
theDll = LoadLibrary();
pfnfoo = GetProcAddress(dll, "Foo");
return TRUE;
}
// Export for foo
void Foo()
{
// Use one-time init for thread-safe lazy initialization
InitOnceExecuteOnce(initOnce, BinDll, NULL, NULL)
pfnFoo();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4435 次 |
最近记录: |