记录: 但是测试成功,不知道是问题出在什么地方?
可以指定序数来调用,许多未公开的Windows API就是这样调用的。
::GetProcAddress(hLib, (char *)1); // 调用hLib第2个函数。
GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。 函数原型: FARPROC GetProcAddress( HMODULE hModule, // DLL模块句柄 LPCSTR lpProcName // 函数名 );
hModule [in] 包含此函数的DLL模块的句柄。LoadLibrary、AfxLoadLibrary 或者GetModuleHandle函数可以返回此句柄。 lpProcName [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。
http://baike.baidu.com/view/1523523.htm
http://blog.csdn.net/danhu/article/details/1776202
好像可以吧,只是我直接填入数字,编译出错.
知道微软官方的资料:
按序号而不是按名称从 DLL 导出函数
从 DLL 导出函数的最简单方法是按名称导出它们。例如,使用 __declspec(dllexport) 时所采用的就是这种方法。但也可以按序号导出函数。使用此技术时,必须使用 .def 文件而不是 __declspec(dllexport)。若要指定函数的序号值,请将其序号追加到 .def 文件中的函数名。有关指定序号的信息,请参见使用 .def 文件从 DLL 导出。
提示 |
---|
如果希望优化 DLL 文件的大小,请对每个导出函数使用 NONAME 属性。使用 NONAME 属性时,序号存储在 DLL 的导出表中而非函数名中。如果导出许多函数,这样做可以节省相当多的空间。 |