在编写双显示器程序时用到EnumDisplayDevices等函数.
我在MSDN中找到EnumDisplayDevices函数的帮助,其在winuser.h中声明,但我编译时就出现未声明的标识错误. 其在User32.lib中实现,我看了好几个例子,都是是用下面的形式:BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
typedef BOOL(WINAPI*EMPROC)(PVOID,DWORD,PVOID,DWORD);
pEnumDisplayDevices =(EMPROC) GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA");
...
(*pEnumDisplayDevices)(NULL, i, &dd, 0);
来实现请问这是为什么呢? 为什么直接用EnumDisplayDevice(....)不行呢?
我在MSDN中找到EnumDisplayDevices函数的帮助,其在winuser.h中声明,但我编译时就出现未声明的标识错误. 其在User32.lib中实现,我看了好几个例子,都是是用下面的形式:BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
typedef BOOL(WINAPI*EMPROC)(PVOID,DWORD,PVOID,DWORD);
pEnumDisplayDevices =(EMPROC) GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA");
...
(*pEnumDisplayDevices)(NULL, i, &dd, 0);
来实现请问这是为什么呢? 为什么直接用EnumDisplayDevice(....)不行呢?
另外一个原因可能是你的winuser.h文件太老,或版本不对。
EnumDisplayDevices在MSDN在线帮助中有明确讲解,不会是未公开函数吧?
我看了几个例子都是用上面的方法实现的,难道他们的winuser.h都太老吗?
我按这个例子中的做法也做出来了,现在想弄明白为什么不能直接引用?
我在WIN98SE和WIN2000都试过,结果一样.
用MFC或不用MFC也都一样.
在32位操作系统下,多数函数都保留了16位参数的函数版本。
譬如你调用CreateWindow(),根据你宏定义的不同,实际上分别调用的是CreateWindowA()和CreateWindowW(),带A的一般是非unicode版本,带W的一般是unicode版本。
所以
你的因答好象不能说明问题啊.
象TextOut也有TextOutA和TextOutW,
为什么我们能直接写TextOut而不用LoadLibrary?而这些函数却要这么做呢?
Link时还是找不到啊.
tttDlg.obj : error LNK2001: unresolved external symbol "int __stdcall EnumDisplayDevices(void *,unsigned long,void *,unsigned long)" (?EnumDisplayDevices@@YGHPAXK0K@Z)
Debug/ttt.exe : fatal error LNK1120: 1 unresolved externals
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
所以API(User32.dll)中根本没有MessageBox,只有MessageBoxW,MessageBoxA
我想还是有些问题,要不别人用这个函数为什么非得用LoadLibrary呢?
为什么不找个新版本的.h呢?