lib是静态库还是动态库,调用静态库lib

  lib是静态库还是动态库,调用静态库lib

  在一些项目中,考虑到系统的安全性和稳定性,往往需要封装一些DLL或LIB库供他人使用,那么如何制作DLL或LIB文件呢?今天天气真凉爽。我根据自己的实际情况来讲解一下基本的制作方法。

  以下是我自己操作的记录:

  1、动态库dll的编写方法:

  创建新的动态链接库:

  填写项目名称以选择项目类型。如果没有特殊要求,选择一个空项目。

  您将在这里看到,与标准控制台项目一样,默认情况下没有创建任何文件。

  我们需要在下面添加一些文件。

  要构建一个动态库dll文件,我们不需要写main函数。我们只需要实现我们需要一个一个实现的接口函数。我们需要在这里使用它们

  解释ext c _ _ declspec(dll导出)。您可以通过将extern C __declspec(dllexport)添加到声明中来导出函数。

  例如:

  新建function.h,function.cpp

  函数. h

  #ifndef __FUNCTION_H__

  #定义__函数_H__

  #包含afx.h

  #includeinclude.h

  //3DES加密函数. 24字节密钥(导出函数)

  extern C _ _ declspec(dll export)HANDLE Open();

  #endif

  并且可以用function.cpp编写

  extern C __declspec(dllexport)句柄打开()

  {

  HANDLE dev HANDLE=INVALID _ HANDLE _ VALUE;

  dev handle=open device();

  返回DevHandle

  }

  编译后,您可以在debuf或release文件夹中看到dll文件。

  使用dll文件也很简单:把生成的dll文件放在应用程序的项目目录下,我们还需要上一步的导出头文件。

  #包含“AppTest.h”

  //#pragma注释(lib, AppTest.lib )

  HINSTANCE MyDll

  处理Encryp

  //打开dll文件

  MyDll=LoadLibrary( apptest . dll );

  if(MyDll==NULL)

  {

  退出(0);

  }

  typedef句柄(* DllFun)();//函数指针,注意原函数的原型。

  DllFun MyFun

  my fun=(DllFun)GetProcAddress(MyDll, Open );//获取这个函数的虚拟地址

  if(MyFun==NULL)

  {

  AfxMessageBox(未能获取dll函数!);

  退出(0);

  }

  encryp=my fun();//调用MyFUn实际上是调用dll中的OpenDog

  if(Encryp==INVALID _ HANDLE _ VALUE)

  {

  退出(0);

  }

  静态库的建立和应用

  创建新的静态库项目。

  如果不关注任何选项,可以默认。完成后,项目中目前没有文档,需要我们自己添加。我们也不写主函数,只需要写功能函数的实现。然后在头文件中用extern修饰,编译。

  例如,我们创建新的function.h和function.cpp文件。

  函数. h

  #ifndef __FUNCTION_H__

  #定义__函数_H__

  #包含afx.h

  #includeinclude.h

  外部句柄open dog();

  #endif

  函数. cpp

  句柄OpenDog()

  {

  HANDLE dev HANDLE=INVALID _ HANDLE _ VALUE;

  dev handle=open device();

  返回DevHandle

  }

  这样,就可以编制了。

  但是我在这里遇到了很多问题,编译时总是提示错误。这主要是由于一些名称空间的名称重复造成的。这种错误很麻烦。下面是我编译lib时的工程设置。

  特别注意第二页中显示的被忽略的库。

  lib静态库的使用:使用# pragma comment (lib, apptest.lib )后,直接调用静态库的函数即可。

  #包含“AppTest.h”

  #pragma注释(lib, AppTest.lib )

  处理加密狗;

  encryp dog=open dog();

  if(encryptog==INVALID _ HANDLE _ VALUE)

  {

  退出(0);

  }

lib是静态库还是动态库,调用静态库lib