鬼火狼烟吧 关注:230贴子:5,311
  • 4回复贴,共1

外部函数说明和DLL输入说明的区别?

只看楼主收藏回复

#include "stdafx.h"
#pragma comment(lib,"textdll")
extern int TextDLL();

int _stdcall main()
{   char a[2]={0,0};
    a[0]='0'+TextDLL();
MessageBox(NULL,a,"Answer",MB_OK);
return 0;
}




#include "stdafx.h"
#pragma comment(lib,"textdll")
_declspec(dllimport) int TextDLL();

int _stdcall main()
{   char a[2]={0,0};
    a[0]='0'+TextDLL();
MessageBox(NULL,a,"Answer",MB_OK);
return 0;
}
上面的代码有区别么?
我看一本书,所后者生成的代码比前者的运行效率更高,这话对么?我怎么觉得,这只是编译器的事,只是后者让编译器更容易地找到TextDLL()的定义罢了,对代码没有什么大的影响。但我比较它们的机器码时,出现了152处的不同的字节(包括PE的,但这部分好象很少)
到底它们有什么区别?



IP属地:湖南1楼2007-04-28 00:54回复
    没有效率差别,但是仍然推荐后一种方式,因为使用extern你无法对阅读代码的人指出这是一个dll函数还是一个外部函数~


    2楼2007-04-29 12:13
    回复
      2026-03-06 11:39:57
      广告
      不感兴趣
      开通SVIP免广告
      thank you 了!


      IP属地:湖南3楼2007-05-01 11:44
      回复
        没有extern "C"明显是一个工程(纯C或是纯Cpp)里的,不标准用法。

        另外,main不是__stdcall,而是__cdecl,因为mainCRTStartup里是call main后add esp,0ch,调用者修正堆栈,你加了__stdcall后,main函数体内修正一次,mainCRTStartup里再修正一次就出现异常了,没有看到异常是因为进程退出了,或者说你很幸运。


        4楼2007-05-03 19:51
        回复
          指定一下extern "C"是必要的


          5楼2007-05-07 09:46
          回复