簡體   English   中英

將Lib advapi32.dll中的OpenEventLog()聲明為Integer還是Long?

[英]Declare OpenEventLog() in Lib advapi32.dll as Integer or Long?

對於我的應用程序,只有Long可以同時在W2K8R2和W2K12上使用。

我有一個使用三個調用保存NT事件日志的現有應用程序:

Declare
FunctionOpenEventLog Lib"advapi32.dll"Alias"OpenEventLogA"(ByValServerName AsString, ByValSourceName AsString) AsInteger

Declare
FunctionBackupEventLog Lib"advapi32.dll"Alias"BackupEventLogA"(ByValEventLogHandle AsInteger, ByValBackupFileName AsString) AsBoolean

Declare
FunctionCloseEventLog Lib"advapi32.dll"(ByValEventLogHandle AsInteger) AsBoolean

在VS 2012中構建應用程序后,該代碼在小型測試應用程序中時,可以在Windows Server 2008R2和Windows Server 2012上正常運行。

我繼承了一個大型應用程序,其中也包含上述聲明。 在大型應用程序中可以應用許多設置-我只是想了解VB。 該應用程序在Windows Server 2008 R2上運行良好,但是在Windows Server 2012上,OpenEventLog()返回的句柄不正確-當傳遞給BackupEventLog()時,導致句柄錯誤。 該句柄是一個很大的負數,因此我嘗試在上述聲明中聲明“ Handle”參數並返回值“ As Long”而不是“ As Integer”。 大型VB應用程序現在可以在W2K8和W2K12上運行。

這有點令人擔憂,因為這不是預期的行為(從我的角度來看),這意味着我們需要在所有受支持的Windows版本上全面測試所有功能。

哪個聲明是正確的-“作為整數”還是“盡可能長”?

有沒有更好的方法編寫此代碼?

是否有“ As Handle”方式對此進行編碼?

由於小型獨立測試應用程序使用“ As Integer”,並且可以在W2k8R2和W2K12上運行,因此是否存在引起問題的項目設置?

有問題值是HANDLE MSDN中所述 ,這是一個指針,因此在x86應用程序中為32位長(整數),在x64應用程序中為64位長(長)。

默認情況下,.NET應用程序在64位操作系統上以x64運行,在32位操作系統上以x86運行。 因此,句柄的大小取決於您所運行的操作系統。

而不是使用Integer或Long(在所有情況下都不正確),請使用IntPtr

暫無
暫無

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

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