HI!
That did not make a difference. Still getting 0.
Thomas
Timothy Wall wrote:
I'd guess that the construction of a Pointer with the return value
(which causes object allocation) is causing the GetLastError value to be
overwritten.
Try changing the return type to void to see if it makes a difference (I
know that's not useful in actual usage, but it'll help determine if it's
the allocation of the return value which clears the error).
T.
On Aug 8, 2007, at 8:16 AM, Thomas Börkel wrote:
HI!
I am too struggling with GetLastError().
I am not using the Kernel32 class from the examples, but my own. I tried
to define the return type as NativeLong and as int with no difference. I
always get 0 from GetLastError(), where I get for example "5" in C.
Relevant bits:
Java:
Pointer handle;
handle = getServiceHandle("localhost", WINNT.GENERIC_EXECUTE);
public static Pointer getServiceHandle(String machine, long access)
throws Exception {
Pointer handle;
Advapi32 advapi32;
WString machineW;
NativeLong accessNL;
int lastError;
advapi32 = Advapi32.INSTANCE;
machineW = new WString(machine);
accessNL = new NativeLong(access);
Kernel32.INSTANCE.GetLastError();
handle = advapi32.OpenSCManagerW(machineW, null, accessNL);
lastError = Kernel32.INSTANCE.GetLastError();
if(handle == null) {
throw new Exception("Win32 error: " + lastError);
}
return(handle);
}
C:
printf("%ld\n", OpenSCManagerW(L"localhost", NULL, GENERIC_EXECUTE));
printf("%ld\n", GetLastError());