user32.dllにあるAccess 2016 x64にローカライズされたボタンのキャプションをロードしようとしています。x32 VBAにアクセス - user32.dllから文字列をロードしようとするとERROR_RESOURCE_DATA_NOT_FOUNDを取得する
奇妙なことに、Access 2010 x86がインストールされている別のマシンでは、コードは完全に機能します。彼はSTRINGTABLEを見つけることができませんように私は、もしブロックに入るために管理することはできません
Option Compare Database
Option Explicit
Private Declare PtrSafe Function LoadString Lib "user32" Alias "LoadStringA" (_
ByVal hInstance As Long, _
ByVal uID As Long, _
ByVal lpBuffer As String, _
ByVal nBufferMax As Long) _
As Long
Private Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (_
ByVal lpFileName As String) _
As Long
Private Enum CAPTION
OK_CAPTION = 800
CANCEL_CAPTION = 801
ABORT_CAPTION = 802
RETRY_CAPTION = 803
IGNORE_CAPTION = 804
YES_CAPTION = 805
NO_CAPTION = 806
CLOSE_CAPTION = 807
HELP_CAPTION = 808
TRYAGAIN_CAPTION = 809
CONTINUE_CAPTION = 810
End Enum
Private Const lPath As String = "user32.dll"
Private Const BufferMax As Long = 256
Private Const cIndex As Long = CAPTION.OK_CAPTION
Private Sub cmdGetCaptionById_Click()
Dim Buffer As String * BufferMax
Dim Instance As Long
Dim sLen As Long
Instance = LoadLibrary(lPath)
sLen = LoadString(Instance, cIndex, Buffer, BufferMax)
If sLen <> 0 Then
Caption = Left(Buffer, sLen)
MsgBox Caption, vbInformation
Else
MsgBox "No caption found, error " & Err.LastDllError, vbCritical
End If
End Sub
、それはです:
コードは次のようです。
詳細なエラー:
ERROR_RESOURCE_DATA_NOT_FOUND
1812 (0x714)
The specified image file did not contain a resource section.
予想される文字列出力、CINDEXに基づいて(この場合、OK_CAPTIONには、ID = 800を持っている):
Caption = "Ok"
ヘルプは非常に感謝されます!
あなたはただの事実を述べています。エラーメッセージが示すように、Windowsのそれ以降のバージョンでは、user32.dllにこれらの文字列が存在しなくなりました。これらの実装の詳細に依拠することは常に非常に悪い習慣でしたが、ニワトリは家に帰ってきました。 –
ResourceViewer .NETで実際にuser32.dllを開きました。それらをすべて見つけたので、かなり奇妙です。 –
LoadLibraryはLong型ではなくLongPtrを返すように修正されました。 –