Outshynd Posted May 4, 2005 Share 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 Link to comment Share on other sites More sharing options...
Ejoc Posted May 4, 2005 Share 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 Link to comment Share on other sites More sharing options...
Outshynd Posted May 4, 2005 Author Share 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 Link to comment Share on other sites More sharing options...
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