преобразовать объект типа класса в Intptr - PullRequest
0 голосов
/ 26 февраля 2011

вертолёт Я знаю, что это может быть легко, но поверьте мне, я не понял это из того, что я нашел в Google. Я пытаюсь сделать следующее:

unsafe static IntPtr __convertSearcherCallbackParameterToIntPtr (SearcherCallbackParameter searcherCallbackParameter ) { return (*(IntPtr*)&searcherCallbackParameter); }

где SearcherCallbackParameter - класс, и мне нужно преобразовать его в IntPtr, чтобы я мог передать его в качестве параметра в API Windows.

Я получаю следующую ошибку: Невозможно получить адрес, получить размер или объявить указатель на управляемый тип

1 Ответ

1 голос
/ 26 февраля 2011

Вы можете просто использовать простой делегат .NET, уровень взаимодействия позаботится о распределении.Следующий код принимает объявления собственных функций от http://pinvoke.net/default.aspx/user32/EnumWindows.html

Параметр функции обратного вызова является целым числом, хотя на самом деле он не должен быть IntPtr.

public delegate bool CallBackPtr(int hwnd, int lParam);


[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumWindows(CallBackPtr lpEnumFunc, UInt32 lParam);


static bool callbackreport(int hwnd, int lparam)
{
    Console.WriteLine("{0} {1}", hwnd, lparam);
    return true;
}

static void Main(string[] args)
{
    EnumWindows(Program.callbackreport,0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...