Como mapear tipos Win32 para tipos C # ao usar P / Invoke?
Eu estou tentando fazer algo comoesta em c #. Eu descobri como chamar métodos Win32 de C # usando P / Invokedeste link. No entanto, encontrei algumas dificuldades na implementação do P / Invoke.
Por exemplo, um dos métodos que eu gostaria de acessar éPdhOpenQuery, assinatura:
PDH_STATUS PdhOpenQuery(
__in LPCTSTR szDataSource,
__in DWORD_PTR dwUserData,
__out PDH_HQUERY *phQuery
);
Eu acho que a declaração C # correspondente deve ser algo como isto
[DllImport("Pdh.dll")]
static extern PDH_STATUS PdhOpenQuery(LPCTSTR szDataSource,
DWORD_PTR dwUserData, out PDH_HQUERY *phQuery);
Minhas perguntas:
O que é LPCTSTR e para que tipo de dados ele mapeia em C #?
Como mapear um tipo de ponteiro DWORD_PTR? O artigo pinvoke diz que os mapas DWORD para o UInt32, mas e os ponteiros?
Eu acho que PDH_STATUS e PDH_HQUERY são estruturas específicas da biblioteca (ainda não tenho certeza). como eu mapeio isso?
Qual é a declaração de método correta e como você a chama corretamente?