我正在使用Visual C++ 6.0构建的一些古老的代码库。我需要调用AllowSetForegroundWindow()
,但是使用它构建的平台SDK并未定义该函数(我想它是2000年前的一些PSDK)。
将PSDK更新为包含AllowSetForegroundWindow()
的PSDK似乎不是一种选择,因为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的平台上默认失败)。您可能需要根据错误处理或线程安全性进行自定义。
关于c++ - 静态链接具有更新平台SDK的库,可能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15075060/