在VS中添加lib库的三种方法与DLL加载的四种方法

一.lib库加载方式

方法1:  通过设置工程配置来添加lib库.

A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。

B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。

C、  然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。

这种方法比较繁琐,且不直观,而且还可能要争对debug版本和release版本作不同的配置,因为我们生成的两个版本的库可能放在不同的目录中的.

方法2: 使用编译语句:

#ifdef _DEBUG

#pragma comment(lib,"..\\debug\\LedCtrlBoard.lib")

#else

#pragma comment(lib,"..\\release\\LedCtrlBoard.lib")

#endif

这种方法直观,方便,且可以按如上直接区分出Debug版本和Release版本的不同目录.当然,通过宏,还可以区分更多版本.

但是在指定目录时,不小心容易出错.

方法3: 直接添加库文件到工程中.

就像你添加.h和.cpp文件一样,把lib文件添加到工程文件列表中去.

VC中,切换到"解决方案视图",--->选中要添加lib的工程-->点击右键-->"添加"-->"现有项"-->选择lib文件-->确定.

就是这么简单,搞定.

这个方法适用于在我的工程的debug版本和Release版本中都使用同一个lib库文件时.这样就省去了你1方法配置环境的繁琐,也省去了方法2种语句的可能性错误发生.

二.动态库加载方法

方法一:代码加载方法:

LoadLibrary

GetProcAddress

FreeLibrary

示例

#include <stdio.h>

#include <Windows.h>

#pragma comment(lib, "DllLoad.lib")

int main()

{

   HINSTANCE h = LoadLibraryA("DllLoad.dll");

   typedef int(*FunPtr)(int a, int b);//定义函数指针

   if (h == NULL)

   {

      FreeLibrary(h);

      printf("load lib error\n");

   }

   else

   {

      FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");

      if (funPtr != NULL)

      {

         int result = funPtr(8, 3);

         printf("8 + 3 =%d\n", result);

      }

      else

      {

         printf("get process error\n");

         printf("%d", GetLastError());

      }

      FreeLibrary(h);

   }

   return 0;

}

方法二:把dll复制到工程的可执行文件(exe)所在的目录下,例如在Debug下编译,就复制到Debug目录下。


方法在系统的环境变量中添加该dll的路径。


方法添加项目调试环境中,项目->属性->调试->环境:输入path=包含dll文件的文件夹路径。

三.头文件

方法一:如果include中的文件比较少,直接把include文件中的(.h)文件复制到项目中,然后直接导入到项目中。


方法二:如果include中的文件比较多,项目->属性->VC++目录->包含目录,添加上include文件夹的地址。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Linux系统上,通常使用共享(shared library)而非动态链接DLL)来实现代码的共享和重用。在Qt,可以使用qmake构建一个共享,然后在代码使用QLibrary类动态加载和调用该共享。 下面是一个简单的示例: 1. 创建一个共享项目 在Qt Creator,选择File->New File or Project,选择Library->C++ Library->C++ Shared Library。 2. 实现一个简单的共享函数 在项目添加一个.h文件和.cpp文件,实现一个简单的共享函数,例如: ``` //mylib.h #ifndef MYLIB_H #define MYLIB_H #ifdef __cplusplus extern "C" { #endif void myFunction(); #ifdef __cplusplus } #endif #endif // MYLIB_H //mylib.cpp #include <iostream> #include "mylib.h" void myFunction() { std::cout << "Hello from my shared library!" << std::endl; } ``` 3. 构建共享 在.pro文件添加以下内容: ``` TARGET = mylib TEMPLATE = lib CONFIG += shared SOURCES += mylib.cpp HEADERS += mylib.h ``` 然后使用qmake构建项目,生成共享文件。 4. 动态加载共享并调用函数 在需要使用共享的代码,使用QLibrary类动态加载共享,并调用其的函数,例如: ``` #include <QLibrary> typedef void (*MyFunction)(); int main() { QLibrary myLib("mylib.so"); //加载共享文件 if (myLib.load()) { MyFunction myFunction = (MyFunction) myLib.resolve("myFunction"); //获取共享函数指针 if (myFunction) { myFunction(); //调用共享函数 } myLib.unload(); //卸载共享 } return 0; } ``` 注意,在Linux系统上,共享文件的扩展名通常为.so,而不是.dll

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI+程序员在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值