![](/img/trans.png)
[英]LogonUser Lib “advapi32.dll” strange on non domain cpu when local account exists?
[英]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上运行,因此是否存在引起问题的项目设置?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.