字体
第(4/4)页
关灯
   存书签 书架管理 返回目录
约定规则如下。

    ? 以“?”标识函数名的开始,后跟函数名。

    ? 函数名后面以“@@YG”标识参数表的开始,后跟参数表。

    ? 参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型。

    ? 参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。

    其格式为“?functionncom@@YG*****@Z”或“?functionncom@@YG*XZ”,例如:

    int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z”,void Test2()-----

    “?Test2@@YGXXZ”。

    cdecl 调用约定规则同上面的stdcall 调用约定类似,只是参数表的开始标识由上面的

    “@@YG”变为“@@YA”。

    fastcall 调用约定规则同上面的stdcall 调用约定,只是参数表的开始标识由上面的

    “@@YG”变为“@@YI”。

    3.得到没有修饰的函数名

    Visual C++ 输出函数时使用_declspec(dllexport) , 而不再用_export 修饰字。

    _declspec(dllexport)在C 调用约定、C 编译情况下可以去掉输出函数名的下划线前缀。extern

    "C"使得在C++中使用C 编译方式成为可能,在一个C++文件中,用extern "C"来指明该函数

    使用C 编译方式。例如,在一个C++文件中,有如下函数:

    extern "C" {void __declspec(dllexport) __cdecl Test(int var);}

    其输出函数名为Test。

    为了方便,可以使用下列预处理语句:

    #if defined(__cplusplus)

    extern "C"

    {

    #endif

    //函数原型说明

    #if defined(__cplusplus)

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·264·

    }

    #endif

    经过上面的特殊处理,不管在C 中,还是在C++中都可以得到一个无任何修饰的函数名。

    如果不用_declspec(dllexport)修饰字输出函数,而用DEF 文件来输出函数。将要输出的

    函数修饰名罗列在EXPORTS 之下,这个名字必须与定义函数的名字完全一致,如此就得到

    一个没有任何修饰的函数名了。

    10.4.4 模块定义文件(DEF 文件)

    模块定义文件(DEF)是一个或多个用于描述DLL 属xìng的模块语句组成的文本文件,每

    个DEF 文件至少必须包含以下模块定义语句。

    ? 第一个语句必须是LIBRARY 语句,指出DLL 的名字;

    ? EXPORTS 语句列出被导出函数的名字;将要输出的函数修饰名罗列在EXPORTS

    松语文学免费小说阅读_www.16sy.com
上一页 目录 下一章