Выложили на CodePlex замечательную утилитку
P/Invoke Interop Assistant
Описание утилиты можо найти в
январьском номере MSDN Magazine
Надеюсь эта утилитка уменьшит кол-во вопросов связанных с P/Invoke
Здравствуйте, Аноним, Вы писали:
Вот этот код
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HWND__ {
/// int
public int unused;
}
public partial class NativeMethods {
/// Return Type: LRESULT->LONG_PTR->int
///hWnd: HWND->HWND__*
///Msg: UINT->unsigned int
///wParam: WPARAM->UINT_PTR->unsigned int
///lParam: LPARAM->LONG_PTR->int
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint="SendMessageW")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.SysInt)]
public static extern int SendMessageW([System.Runtime.InteropServices.InAttribute()] System.IntPtr hWnd, uint Msg, [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.SysUInt)] uint wParam, [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.SysInt)] int lParam) ;
}
вместо вот этого
public partial class NativeMethods
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.SysInt)]
public static extern int SendMessageW(
[In] IntPtr hWnd,
[In] uint Msg,
[In][MarshalAs(UnmanagedType.SysUInt)] uint wParam,
[In][MarshalAs(UnmanagedType.SysInt)] int lParam);
}
я использовать никогда не буду.
Для well-known функции был сгенерирован избыточный и несогласованный код. Не используются пространства имён, структура HWND__ объявлена, нон е используется, аттрибут In проставлен но не везде. вобщем утилита в достаточно большой степени бесполезная.
Утилитка всеже часто полезная, вот только вышла она уж пару лет назад (возможно не она, но софтина с таким же названием и функционалом).