静态链接一个具有较新平台SDK的库,可能吗?

我正在使用Visual C ++ 6.0构build一些古老的代码库。 我需要调用AllowSetForegroundWindow()但是它正在构build的平台SDK没有定义这个函数(我猜这是2000年之前的一些PSDK)。

更新PSDK到一个包含AllowSetForegroundWindow()似乎不是一个选项,因为Microsoft不再提供对Visual C ++ 6.0的支持,并且SDK不能在线(甚至从购买光盘,我试过)。

我的问题是,我是否可以在VS2010中编写一个包含AllowSetForegroundWindow()调用的静态库,并与VSC ++ 6.0项目链接,并通过该库调用该调用。

或者有没有人有一个更好的主意,我可以如何解决这个问题一般? 谢谢。

您可以使用GetProcAddress()在运行时将包装函数连接到实际的函数:

 BOOL WINAPI defaultAllowSetForegroundWindow( DWORD dwProcessId) { SetLastError(ERROR_NOT_SUPPORTED); return 0; } BOOL WINAPI shimAllowSetForegroundWindow( DWORD dwProcessId) { static BOOL (WINAPI *asfw)(DWORD) = 0; if (!asfw) { HMODULE user32 = LoadLibraryW(L"USER32"); if (user32) { asfw = (BOOL (WINAPI *)(DWORD)) GetProcAddress( user32, "AllowSetForegroundWindow"); } if (!asfw) { asfw = defaultAllowSetForegroundWindow; } } return (*asfw)(dwProcessId); } 

你的代码可以调用shimAllowSetForegroundWindow() ,它将转发给真实的API(或者默认情况下,在不支持该API的平台上会优雅地失败)。

您可能需要根据您的需求进行自定义,以进行错误处理或线程安全。