PDA

View Full Version : مشکل در کلاس من 'Use of unassigned local variable 'ptr



hhaaddii1363
سه شنبه 21 مهر 1394, 20:48 عصر
با عرض سلام و عرض ادب .
بنده در کلاسم یه مشکل دارم لطفا راهنمایی بفرمایید

public float ReadFloat(uint Address)
{
IntPtr ptr;
byte[] buffer = new byte[8];
IntPtr lpBaseAddress = new IntPtr((long) Address);
ReadProcessMemory(this.OpenGame(), lpBaseAddress, buffer, 4, ref ptr);
return BitConverter.ToSingle(buffer, 0);
}

خطا رو در قسمت بعد از ref تو قسمت ptr نشون میده - در سایت های خارجی خوندم فک کنم باید intptr رو مقدار ش رو صفر کنم ولی خطا داد
با تشکر

am_al_59
دوشنبه 27 مهر 1394, 03:09 صبح
به احتمال زیاد خطای شما در عدم همخوانی تعریف مقادیر دریافتی توسط ReadProcessMemory و روش پاس دادن مقادیر هست
ReadProcessMemory یک API هست که در kernel32.dll هست پارامتر های ورودیشو هم میشه با IntPtr تعریف کرد هم با int اون قسمت مربوط به طول بافر روهم میشه long تعریف کرد یا UInt32
اما هرطور که تعریف میشه باید همونطور هم استفاده بشه یک نوع تعریفش با انواع داده های معمولی این میشه

[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(int processHandle,int beginReadAddress, byte[] readBuffer, int countBytesToRead, ref int coutBytesThatSuccessRead);

نوع دیگش هم با داده هایی که برای ارتباط با پوینترها استفاده میشن اینه

[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr processHandle,IntPtr beginReadAddress, byte[] readBuffer, UInt32 countBytesToRead, ref UInt32 coutBytesThatSuccessRead);

از ترکیب هر دو هم میشه استفاده کرد خلاصه که هرطور تعریف کردی همون طور و با همون نوع هم باید داده هاتو بهش بدی