VC成功制作并使用lib库

来源:互联网 发布:matlab矩阵间隔取数 编辑:程序博客网 时间:2024/05/16 11:51
微软有许多头文件,这些头文件里面定义了许多函数,但是在头文件中你却找不到函数内容的身影,因为函数主体被保存在了lib库中。保存在库中有一个好处,那就是源代码不容易被发现,也就是说其中的一些技术别人不容易学到。废话少说,我们现在就开始制作lib库。
      首先,第一步,打开VC++6.0,按Ctrl+N,选择工程选项卡,选中“Win32 Static Library”选项,输入工程名称,我们这里用“Lib
【VC++6.0】成功制作并使用lib库(原创) - sunnysab - 开心最重要库”,大家可以自己选择,至于路径,随便选一个吧,反正这次只是lib的实验。
     然后点击“确定”,我们两个都不选,如果选择“预编译的头文件”的话系统会自动帮你建好stdafx.h和stdafx.cpp。但另外一个“MFC支持”我没试过。
     点击完成后建立了一个空的工程,我们新建一个CPP文件(注意选上“添加到工程“Lib库”“这个选项,输入文件名main.cpp,随后,在main.cpp中间输入函数代码和头文件,注意这里不需要添加main函数也不需要类似的包括dllmain函数在内的函数。
    编译,有错的改错,没错的运行。VC6会提示要求输入可执行文件名,我们点击取消,随后生成Lib库.lib完成。
    现在请把Debug下的Lib库.lib复制到系统目录或D盘中(我是复制到D盘的)
    不要以为现在就完成了哦!我们新建一个.h文件(实际上可以打开任意文件夹或驱动器,右键—>新建—>新建文本文档,然后重命名为.h文件即可。)这里用lib.h,用记事本或VC++6打开我们刚刚新建的.h文件,将你定义的函数中函数的原型复制进去,比如说我刚才在lib文件中定义了一下函数:
int abc()
{
    printf("abc\n");
    return 0;
}
      那么我在头文件中只要这么写:"int abc();" 就可以了(引号不算),注意后面有一个分号。.h文件编辑完了以后你就可以引用了,将.h文件复制到D盘中,在VC6中新建一个cpp文件,输入(我这里以lib文件和.h文件都在d:\下做示范):
#include <d:\lib.h>
#pragma    comment(lib,    "d:\lib.lib")  //不是#include来包含,我一开始写日志时写错了,感谢狂飙为我从天落指出
int main()
{
    abc();
    return 0;
}
运行,没有错误,你会看到屏幕输出abc。

制作DLL文件

一.Win32动态链接库

  1.制作的步骤:

  (1)新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型。

  (2)MyDll.h的内容如下:

以下是引用片段:
  extern "C" _declspec(dllexport) int sum(int a,int b);//本文所有的例子只有一个sum即加法函数。

  (3)MyDll.cpp的内容如下:

以下是引用片段:
  #include "stdafx.h" 
  #include "windows.h" 
  #include "MyDll.h" 
  BOOL APIENTRY DllMain( 
  HANDLE hModule, 
  DWORD ul_reason_for_call, 
  LPVOID lpReserved 
  ) 
  { 
  return TRUE; 
  } 
  extern "C" _declspec(dllexport)int sum(int a, int b) 
  { 
  return a+b; 
  }

  (4)编译之后产生了MyDll.lib与MyDll.dll两个文件。

  2.使用方法:

  (1).隐式调用法: 将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:

以下是引用片段:
  #include "MyDll.h" 
  #pragma comment(lib,"MyDll");

  (2).显示调用法:将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中包含头文件,如:

以下是引用片段:
  #include "MyDll.h"

  同时还需要在Project->Setting->Link->Object/library modules的框中增加MyDll.lib这个库。

  二.MFC动态链接库

  1.制作的步骤:

  (1)新建MFC AppWizard(dll)工程,工程名为MFCDll,选择Regular DLL using shared MFC DLL类型。

  (2)在生成的MFCDll.cpp文件后面增加下面几行:

以下是引用片段:
  int sum(int a, int b) 
  { 
  return a+b; 
  }

  (3)在生成的MFCDll.def文件后面增加如下:

以下是引用片段:
  sum @1 ;表示第一个函数是sum

  (4)编译后会产生两个文件MFCDll.lib,MFCDll.dll

  2.使用方法

  (1)隐式调用法: 将MFCDll.lib拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:

  //注意这里没有在MFCDll.h中声明函数,所以不能直接包含MFCDll.h来声明函数。

以下是引用片段:
  #pragma comment(lib,"MFCDll"); 
  int sum(int a, int b);

  //当然如果你的DLL中有很多函数,那可以另外写个MFCDll.h,包含所有的函数声明,然后直接将头文件包含进去

  (2)显示调用法:与Win32的调用方法一样,不需要#pragma comment(lib,"MFCDll");,但是需要在Project->Setting->Link->Object/library modules的框中增加MFCDll.lib这个库。


0 0
原创粉丝点击