BCB 编写 DLL 终极手册

http://tech.ddvip.com   2006年03月31日    社区交流

本文详细介绍BCB 编写 DLL 终极手册

  TESTFUNCTION3 // __pascal calling convention

  TestFunction4 // __stdcall calling convention

  有名字分解的函数

  @TestFunction1$QV // __cdecl calling convention

  @TestFunction2$qv // __fastcall calling convention

  TESTFUNCTION3$qqrv // __apscal calling convention

  @TestFunction4$qqrv // __stdcall calling convention

  使用 extern "C" 不会分解函数名

  使用 Impdef MyLib.def MyLib.DLL 生成 def 文件查看是否使用了名字分解

  2. 调用约定:

  __cdecl 缺省

  是 Borland C++ 的缺省的 C 格式命名约定,它在标识符前加一下划线,以保留

  它原来所有的全程标识符。参数按最右边参数优先的原则传递给栈,然后清栈。

  extaern "C" bool __cdecl TestFunction();

  在 def 文件中显示为

  TestFunction @1

  注释: @1 表示函数的顺序数,将在“使用别名”时使用。

  __pascal Pascal格式

  这时函数名全部变成大写,第一个参数先压栈,然后清栈。

  TESTFUNCTION @1 //def file

  __stdcall 标准调用

  最后一个参数先压栈,然后清栈。

  TestFunction @1 //def file

  __fastcall 把参数传递给寄存器

  第一个参数先压栈,然后清栈。

  @TestFunction @1 //def file

  3. 解决调用约定:

  Microsoft 与 Borland 的 __stdcall 之间的区别是命名方式。 Borland 采用

  __stdcall 的方式去掉了名字起前的下划线。 Microsoft 则是在前加上下划线,在

  后加上 @ ,再后跟为栈保留的字节数。字节数取决于参数在栈所占的空间。每一个

责编:豆豆技术应用

正在加载评论...