簡體   English   中英

USER32.dll中缺少入口點會阻止程序啟動,C ++,VS2015

[英]Missing entry points in USER32.dll stops program from launching, C++, VS2015

我正在Windows 10機器上使用VS2015 (平台工具集v140,目標平台8.1)編寫C ++程序,直到最近,我的程序在Windows 7、8和10上都可以正常運行。

使用GetPointerInfo()添加觸摸支持后,在Windows 7計算機上執行時,我立即收到此彈出錯誤:

在USER32.dll中找不到名為GetPointerInfo的入口點

MS明確指出, GetPointerInfo()僅在Win8及更高版本上受支持,沒關系,但是我不想完全破壞我的程序與Windows 7的兼容性。

我假設Windows 7的USER32.DLL版本根本不包含該功能,但是在我的程序中添加運行時檢查(即,如果IsWindows8OrGreater()返回true,則僅調用GetPointerInfo() )不能解決問題。

實際上,無論是否實際調用函數,僅使用對GetPointerInfo()任何引用編譯我的程序都將破壞Win7兼容性。 該程序甚至不會輸入WinMain() ,它只會向我拋出該消息並退出。

同樣,在Windows 8及更高版本上,一切正常。

我該如何解決?

我已經用Google搜索了半天,但是對DLL,鏈接程序和編譯器設置的了解很少,我顯然甚至不知道該如何用短語表達,因為到目前為止我已經空了。

我已經嘗試將多線程(/ MT)和多線程DLL(/ MD)用作我的運行時庫。

我也嘗試過啟用和禁用功能級鏈接,但是結果保持不變。

我假設Windows 7的USER32.dll版本根本不包含該功能

那是對的。

但是在我的程序中添加運行時檢查(即僅在IsWindows8OrGreater上調用GetPointerInfo)並不能解決問題。 :(

如果您是在運行時動態加載函數,則可以使用鏈接器的延遲加載功能 ,也可以直接在代碼中使用GetProcAddress() (鏈接器的延遲加載器內部為您使用GetProcAddress() )。

實際上,僅使用任何對GetPointerInfo的引用編譯我的程序都將破壞Win7兼容性,無論是否實際調用了功能。

僅當您在編譯時靜態鏈接到該函數而不使用鏈接器的延遲加載功能時,才會發生該錯誤。

非常感謝。

GetProcAddress()對我來說是一個很棒的方法。 我遇到了同樣的問題。 而且我已經引用了有關使用GetProcAddress()的網站

1.寫一些定義

typedef BOOL(WINAPI *GetPointerInfoProc)(UINT32,POINTER_INFO *);

2.延遲加載庫

HMODULE hModule = LoadLibrary(TEXT("user32.dll")); GetPointerInfoProc GetPointerInfo = (GetPointerInfoProc )GetProcAddress(hModule, "GetPointerInfo");

3.通話方式

GetPointerInfo(pointerId,&pointerInfo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM