VC++6.0 动态库的创建与调用(非MFC的dll)

非MFC动态库的创建。。。。

[cpp] view plaincopyprint?

lib.cpp  

[cpp] view plaincopyprint?

#ifndef LIB_H  

#define LIB_H  

  

//声明add为dll的导出函数.  

extern "C" int _declspec(dllexport)add(int x,int y);  

  

#endif  

[cpp] view plaincopyprint?

/*lib.h*/  

#ifndef LIB_H  

#define LIB_H  

  

//声明add为dll的导出函数.  

extern "C" int _declspec(dllexport)add(int x,int y);  

  

#endif  



也可以加上def文件

[cpp] view plaincopyprint?

; lib.def : 导出DLL函数     

    

LIBRARY DllTestDef  

    

EXPORTS     

add @ 1    



非MFc动态库的调用

1.静态调用

[cpp] view plaincopyprint?

//静态的调用dll动态库,已将dll和lib文件放在相应的工作路径下了  

#include <STDIO.H>  

#pragma comment(lib,"dllTEST.lib")//..告诉编译器与dll相关的lib文件放在哪。  

  

extern "C"_declspec(dllimport)add(int x,int y);//声明导入函数  

  

int main()  

{  

    int result=add(2,3);  

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

      

    return 0;  

}  



2.动态调用

[cpp] view plaincopyprint?

//动态的调用dll动态链接库.  

//只需要将dll放在相应的工作目录下即可  

#include<stdio.h>  

#include<windows.h>  

//定义一个与add函数参数类型和返回指针类型均相同的函数指针类型.  

//随后在main函数中实例化  

typedef int(*lpAddFun)(int,int);//宏定义函数指针类型  

  

int main()  

{  

    HINSTANCE hDLL;//DLL句柄  

    lpAddFun addFun;//实例化上面的函数指针类型  

    hDLL=LoadLibrary("./dllTEST.dll");//动态的加载DLL模块,并将DLL的模块句柄给hDLL.  

    if(hDLL!=NULL)  

    {  

        addFun=(lpAddFun)GetProcAddress(hDLL,"add");//将DLL模块中的add函数的地址给addFun  

        if(addFun!=NULL)  

        {  

            int result=addFun(2,3);//通过addFun来调用add函数  

              

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

        }  

          

        FreeLibrary(hDLL);//将DLL动态模块卸载  

    }     

    return 0;  

      

}  

  

你可能感兴趣的:(vc++)