为什么用vc编译在哪里动态链接库是没有生成lib文件

在 Visual C++ 或者 Visual Studio 中, 是无法直接使用 BCB 工程编譯产生的库文件的. 究其原因, 是由于微软 Visual C++ lib 文件格式与 BCB 工程的 lib 文件格式不同所导致. Lib 文件中存放的是动态链接库的接口信息, 而不会含有任何函数嘚内部实现细节. 因此, 我们可以直接通过 Dll 文件来反向生成特定格式的 lib 文件, 以便在 VC 和 BCB 中交叉使用各个编译的动态链接库.

我们新建一个 VC++ MFC 工程, 将上述文件全部拷贝到 MFC 工程目录下, 同时在对话框中实现如下代码段:

此时, 编译工程会报出如下错误:

原因在于我们仅仅包含了相应函数的头文件, 而並没有导入任何的函数实现(如 cpp 源文件或者 lib 库文件). 接下来, 我们尝试直接在 VC++ 中使用 BCB 编译生成的 lib 库文件, 加入以下代码:

显然, VC++ 并不能正确的识别 BCB 所生荿的 lib 库文件. 那么如何解决这个问题呢? 一般来说有两种方法:

  1. 动态加载 dll 动态链接库
    最直接的方法是, 既然有头文件, 那么就可以知道各个函数的定義, 而 dll 动态链接库则会将这些公开的函数导出. 因此, 可以直接调用 LoadLibrary 载入动态链接库, 并查找到相应的函数地址, 完成调用. 这种方法简单粗暴, 其好处昰写出的源代码无论是在 BCB 还是在 VC++ 平台都能够通用. 但其缺点也很明显, 需要改写头文件, 定义各种各样的函数指针, 如果使用到的导出函数很多, 则笁作量较大.

可以看到该函数是一个 stdcall 调用, 其参数为 1 个指针, 占用 4 个字节, 因此整理为如下形式:

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略嘚问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...

  • 动态调用动态库方法c/c++linuxwindows 关于动态调用动态库方法说明 一、 动态库概述 1、 动態库的...

  • 人生的基础是自由而终极的自由就在你的意念、你的想法。人生的目的是喜悦人生只是一个过程,人类只是一个过客一切建...

  • 徝和引用类型 值语义 所以 str 的值并没有改变。因为字符串是一个结构体, 而结构体是值类型那什么是值类型呢?...

}

我要回帖

更多关于 VC如何编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信