مشکل با import کردن dllهای kernerl32 و user32
آقا این kernel32.dll و user32.dll رو چرا نمیشه عین بچه آدم از import ، add reference کرد؟ بعد این کده که این زیر نوشته، در واقع همین کارو با کدنویسی می کنه؟
در واقع یه source code از یه سایتی دانلود کردم، بعد اونجا یه کلاس نوشته بود برای خاموش کردن کامپوتر. اونجا یه همچین چیزایی نوشته بود.
کد:
class CLocker
{
[DllImport("user32.dll")] static extern int GetThreadDesktop(int dwThread);
[DllImport("kernel32.dll")] static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, int dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, ref PROCESS_INFORMATION lpProcessInformation);
}
یه چند تا سؤال.
این که اینو نوشته، از کجا فهمید که باید چنین تابع هایی با چنین اسم هایی با چنین آرگومان هایی تعریف کنه؟
مثلاً همون طور که می بینید شبیه interface هم هست. منظورم اینه که براشون آکولاد اینا باز نکرده که بیاد توضیح بده، همون طوری با ';' گذاشته. فکر می کنم پس فقط باید یه معرفی باشه، یعنی قبلاً توش یه جا دیگه توضیح داده شده (چون extern هم هست).
بعد موضوع این IntPtr چیه؟ چرا اونو گذاشته؟ اصلاً اون واسه چیه؟ (فک کنم یه اشاره گر به نوع int ـه. خب حالا این که مال int ـه یه چیز مثل این هم برای مثلاً string یا bool هم داریم؟
آهااااااااااا، یه چیز دیگه تا یادم نرفته:
کد:
[StructLayout(LayoutKind.Sequential)] struct STARTUPINFO
{
public int cb;
public string lpReserved;
public string lpDesktop;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
اینو تو همون کده نوشته بود. این دیگه چه طرز struct نوشتنه؟ چرا این شکلیه؟ (با توجه به اینکه اینجا هم دوباره IntPtr نوشته)