gpt4 book ai didi

c++ - 静态链接具有较新平台 SDK 的库,可能吗?

转载 作者:可可西里 更新时间:2023-11-01 10:00:09 25 4
gpt4 key购买 nike

我正在处理一些使用 Visual C++ 6.0 构建的古老代码库。我需要调用 AllowSetForegroundWindow() 但构建它的平台 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 的平台上会优雅地失败)。

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

关于c++ - 静态链接具有较新平台 SDK 的库,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com