前几天要的别人的代码看,一个自己使的DLL,4个导出函数突然发现他竟然把dllexport的函数全部在共享段内声明#define SHARE_DATA extern "C" __declspec(dllexport)
#pragma data_seg(".SHARE")
SHARE_DATA bool fun1(arg1..........);
SHARE_DATA bool fun2();
SHARE_DATA bool fun3();
SHARE_DATA bool fun4();
#pragma data_seg()类似这样,人不在也不好问,只是想不通为什么这样写,有什么优劣

解决方案 »

  1.   

    可能是作者的一种习惯,可能是他认为导出的函数都是提供别人使用的,作为dll的特点就是共享,所以放在这里便于代码维护,一看就明了导出了哪些东西
      

  2.   

    不是函数重写,我指的是在运行过程中修改代码区的数据,当DLL被多个进程加载时,在一个进程中对DLL的代码区进行修改会影响所有进程。实际上是没有什么意义的,除非是他担心有人Hook这个DLL的导出函数。
    内存占用会略多一点,可以忽略不计。
      

  3.   

    共享的话,一看就明了导出哪些函数
    有个疑问,在共享段声明函数是就放了个声明还是整个函数都丢进去了?
    我一直以为是全部函数都扔进共享段,这样的话,内存占用肯定要大好多吧……防止DLL导出函数被hook的意识是不是inline hook改函数首地址的话,由于共享,可以被发现?还是说在共享段内声明HOOK之后会引起所有调用者出错?还是不明白内存占用的问题,同上,共享段内到底放进去了什么?函数首地址?整个函数?还是别的什么?请多指教