Как сопоставить типы Win32 с типами C # при использовании P / Invoke?

Я пытаюсь сделать что-то вродеэтот в C #. Я узнал, как вызывать методы Win32 из C #, используя P / Invokeпо этой ссылке, Однако я столкнулся с некоторыми трудностями при реализации P / Invoke.

Например, один из методов, к которым я хотел бы получить доступ,PdhOpenQueryПодпись:

PDH_STATUS PdhOpenQuery(
  __in   LPCTSTR szDataSource,
  __in   DWORD_PTR dwUserData,
  __out  PDH_HQUERY *phQuery
);

Я полагаю, что соответствующее объявление C # должно быть что-то вроде этого

    [DllImport("Pdh.dll")]
    static extern PDH_STATUS PdhOpenQuery(LPCTSTR szDataSource, 
        DWORD_PTR dwUserData, out PDH_HQUERY *phQuery);

Мои вопросы:

Что такое LPCTSTR и какой тип данных он отображает в C #?
Как отобразить указатель типа DWORD_PTR? Статья pinvoke говорит, что DWORD сопоставляется с UInt32, но как насчет указателей?
Я думаю, что PDH_STATUS и PDH_HQUERY являются специфической структурой для библиотеки (я пока не уверен). как мне это сопоставить?

Что такое правильное объявление метода и как вы правильно его называете?

Ответы на вопрос(2)

Ваш ответ на вопрос