加文

希望是美好的……
随笔 - 0, 文章 - 209, 评论 - 0, 引用 - 0
数据加载中……

利用def文件导出函数

DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。 

首先创建 一个DLL程序,.cpp中

int __stdcall Add(int numa, int numb)
{
    return (numa + numb);
}
int __stdcall Sub(int numa, int numb)
{         
   return (numa - numb);
}

然后创建一个.def的文件,在里面加上

         ;DllTestDef.lib : 导出DLL函数
         ;作者:----
         LIBRARY DllTestDef
         EXPORTS 
         Add @ 1
         Sub @ 2
最后创建测试程序:

#include <iostream>
#include <windows.h>
using namespace std;
typedef int (__stdcall *FUN)(intint);HINSTANCE hInstance;
FUN   fun;
int main()
{      
      hInstance = LoadLibrary("DLLTestDef.dll");       
      if(!hInstance)           
          cout << "Not Find this Dll" << endl;      
          fun = (FUN)GetProcAddress(hInstance, MAKEINTRESOURCE(1));  
      if (!fun)      
        {  
              cout << "not find this fun" << endl;    
        }       
       cout << fun(1, 2) << endl;      
       FreeLibrary(hInstance);       
       return 0;
}

说明:
.def文件的规则为:

  (1)LIBRARY语句说明.def文件相应的DLL;

  (2)EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用);

  (3).def 文件中的注释由每个注释行开始处的分号 (;) 指定,且注释不能与语句共享一行。 

 

 

posted on 2012-02-03 23:31 加文 阅读(3991) 评论(0)  编辑 收藏 引用 所属分类: Compile


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理