几何尺寸与公差论坛

 找回密码
 注册
查看: 3584|回复: 5

【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

[复制链接]
发表于 2007-7-11 14:23:46 | 显示全部楼层 |阅读模式
编DLL的时候偶只用过__declspec(dllexport),只是一直想知道__declspec(dllimport)是干什么用的,怎么用?
 楼主| 发表于 2007-7-11 14:24:17 | 显示全部楼层

回复: 【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

从书上看到的:   
  使编译器延迟建立vtable,直到一个真正的实例被创建起来的时候,才建立vtable!为了压缩最后生成的代码长度!
 楼主| 发表于 2007-7-11 14:24:33 | 显示全部楼层

回复: 【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

__declspec(   dllexport   )是告诉编译器这个函数(或变量)是dll的导出函数。   
  而__declspec(dllimport)就是告诉编译器这个函数(或变量)是某个dll里的导出函数,连接时进行查找lib文件。   
  一般动态连接库头文件写法就是   
  #ifdef   _DLL     
  #define   FUNC_DLL   __declspec(   dllexport   )   
  #else   
  #define   FUNC_DLL   __declspec(   dllimport)   
  #endif
 楼主| 发表于 2007-7-11 14:25:35 | 显示全部楼层

回复: 【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

导出函式__declspec(dllexport)在dll中用   
  导入函式__declspec(dllimport)在要调用dll的程序中用     
   
  用__thread或__declspec(thread)声明线程局部变量。
 楼主| 发表于 2007-7-11 14:29:28 | 显示全部楼层

回复: 【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

我现在要编一个DLL供PB调用,有两个函数同名,只是参数稍有不同,请问怎么定义def文件?   
   
  例如:   
      long   ABC(int   intFlag,char*   aaa)   
      long   ABC(int   intFlag,long*   bbb)   
   
  应该怎么去编这样的dll   ?
>
解决了!谢谢上面的各位!   
   
  1、在dll中合并为一个函数:   
  extern   "C"     long   __stdcall   ABC(int   intFlag,void*   aaa)   
  然后在函数内部,根据情况对aaa进行   (char*)   和   (long*),分别进行处理。   
  这样def文件中只有一个函数名ABC,就没有问题了。   
   
  2、在PB中声明如下:   
  Function   long   ABC(long   intFlag,ref   string   aaa)   Library   'my.dll'   alias   for   "ABC"   
  Function   long   ABC(long   intFlag,ref   long   bbb)   Library   'my.dll'   alias   for   "ABC"
 楼主| 发表于 2007-7-11 14:29:59 | 显示全部楼层

回复: 【转帖】请各路高手说说__declspec(dllimport)是用在什么地方的?

14 楼wshcdr(dd)回复于 2005-04-01 22:38:18 得分 0

DLL导出有两种方法
1.DEF文件描述
2._declspec(dllexport)

还有一个HACK的办法,用指针实现的Top

15 楼jronald(深白色)回复于 2005-04-01 23:32:35 得分 0

找到答案了
用_declspec(dllimport)是为了让编译器生成效率更高的代码,不用也不会出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-5-8 04:18 , Processed in 0.039954 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表