相关疑难解决方法(0)

导入库如何工作?细节?

我知道这对极客来说似乎很基础.但我想说清楚.

当我想使用Win32 DLL时,通常我只需要调用像LoadLibrary()和GetProcAdderss()这样的API.但最近,我正在使用DirectX9进行开发,我需要添加d3d9.lib,d3dx9.lib等文件.

我听说LIB用于静态链接,DLL用于动态链接.

所以我目前的理解是LIB包含方法的实现,并在链接时静态链接作为最终EXE文件的一部分.虽然DLL在运行时动态加载,但不是最终EXE文件的一部分.

但有时候,DLL文件会附带一些LIB 文件,因此:

  • 这些LIB文件是什么?
  • 他们如何实现他们的意图?
  • 有没有工具可以让我检查这些LIB文件的内部?

更新1

检查维基百科后,我记得这些LIB文件称为导入库.但我想知道它如何与我的主应用程序和动态加载的DLL一起工作.

更新2

正如RBerteig所说,LIB文件中存在一些与DLL一起出现的存根代码.所以调用序列应该是这样的:

我的主要应用 - > LIB中的stub - >真正的目标DLL

那么这些LIB应包含哪些信息?我能想到以下几点:

  • LIB文件应包含相应DLL的完整路径; 因此DLL可以由运行时加载.
  • 每个DLL导出方法的入口点的相对地址(或文件偏移量?)应该在存根中编码; 因此可以进行正确的跳转/方法调用.

我对吗?还有什么吗?

顺便说一句:有没有可以检查导入库的工具?如果我能看到它,就不会再有疑惑了.

c c++ windows visual-c++

76
推荐指数
2
解决办法
3万
查看次数

我在哪里输入Visual Studio C++项目中的DLL依赖项?

对于具有Visual Studio C++经验的人来说,轻松点:

我正在将在Linux和Mac上运行的一些Qt项目文件(.pro)转换为Visual Studio项目文件(.vcproj)Qt Visual Studio外接程序将所有内容转换为除DLL依赖项之外的所有内容.我在哪里将这些放在Visual Studio 2008中?

如果我将DLL放在配置属性>链接器>输入>附加依赖项中,我得到:

fatal error LNK1107: invalid or corrupt file: cannot read at 0xABC
Run Code Online (Sandbox Code Playgroud)

动态链接的依赖项在哪里?

dll visual-studio visual-c++

8
推荐指数
2
解决办法
2万
查看次数

.h,.dll和.lib混淆

我是vc ++的新手.我刚刚构建了一个软件,它生成了一个.dll和一个.lib.我需要在我的代码中使用这里的函数.我是否需要链接到.lib和.dll来构建我的代码?我必须更改哪些项目属性才能进行此链接?

visual-c++

5
推荐指数
1
解决办法
1106
查看次数

标签 统计

visual-c++ ×3

c ×1

c++ ×1

dll ×1

visual-studio ×1

windows ×1