Outshynd Posted May 4, 2005 Posted May 4, 2005 Okay, here's the C++ source of the DLL function I'm calling: <AU3ReadWriteMemory.dll> extern "C"__declspec(dllexport) float ReadFloat ( long pid, void *address ) { DWORD read=0; float valread=0; HANDLE gamehandle; gamehandle=OpenProcess(PROCESS_ALL_ACCESS, false, pid); if( gamehandle == 0 ) { return -2; } else { ReadProcessMemory(gamehandle, address, &valread, 4, &read); if( read == 0 ) { return -1; } else { return valread; } } } And here is the function that I'm having problems with: <ReadWriteFuncs.au3> Func _ReadFloat($EXEName, $Address) Local $ProcessID = ProcessExists($EXEName) If Not $ProcessID = 0 Then Local $ret = DllCall("AU3ReadWriteMemory.dll", "long", "ReadFloat", "long", $ProcessID, "long", $Address) If @error Then Return -2 Else msgbox(0, "", $ret[0]) Return $ret[0] EndIf Else Return -3 EndIf EndFunc The problem is that I cannot get it to return a Float/Single type variable, or even a string with a decimal, seemingly no matter what I try. I'm all out of ideas. My crappy quick-fix was to chang "float ReadFloat" to "long ReadFloat" and convert valread to a long type variable before returning it -- it returns everything up until the decimal, which is better than nothing -- but it bugs me that I cannot get it to return the Float. I'm sure it's something extremely simple or just a limitation of AutoIt's DllCall function, but, being as this is my second day on both C++ coding and using DllCall, I cannot figure it out for the life of me. Any help would be very appreciated. -Shynd
Ejoc Posted May 4, 2005 Posted May 4, 2005 If you use the beta version of autoit and change your function to have a pointer to a float for the return: extern "C"__declspec(dllexport) float ReadFloat ( long pid, void *address, float *ret ) Then you could do: $float_struct = DllStructCreate("float") Local $ret = DllCall("AU3ReadWriteMemory.dll", "long", "ReadFloat", "long", $ProcessID, "long", $Address,"ptr",DllStructPtr($float_struct)) $float = DllStructGet($float_struct,1) DllStructFree($float_struct) return $float Start -> Programs -> AutoIt v3 -> AutoIt Help File -> Index -> (The Function you are asking about)----- Links -----DllStruct UDFsRSA Crypto UDFs
Outshynd Posted May 4, 2005 Author Posted May 4, 2005 Well, that was easy, as I assumed. I regret not posting here 6 hours ago when I first ran across the problem
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now