AllowSetForegroundWindow

AllowSetForegroundWindow

我正在使用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/

10-16 22:07