#c# #winapi #declaration #windows-7-x64
#c# #winapi #объявление #windows-7-x64
Вопрос:
Мне нужно его использовать, но в pinvoke я не могу получить объявление этого API.
Итак … есть ли способ объявить это?.
И если у вас есть пример для использования, это было бы идеально, потому что я впервые собираюсь использовать этот api.
Комментарии:
1. Не используйте это, WMI также может предоставить вам эту информацию с гораздо меньшими затратами и без зависимости от Vista . Используйте WMI Code Creator, он позволяет экспериментировать и генерирует нужный вам код на C #. microsoft.com/downloads/en /…
Ответ №1:
using System;
using System.Runtime.InteropServices;
using System.Text;
//...
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool QueryFullProcessImageName(IntPtr hProcess, uint dwFlags,
[Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpExeName,
ref uint lpdwSize);
Для использования, смотрите документацию.
Комментарии:
1. Спасибо!. Я протестирую это, но … однако я хочу кое-что знать… Как вы это сделали?… есть ли руководство или что-то в этом роде?
2. @Krahne: Я выучил C. 🙂 Я предлагаю вам сделать то же самое, это не так сложно, но когда вы это сделаете, вы увидите, что происходит. 🙂
3. Сколько времени вы потратили на изучение C? .. Знаете ли вы какую-нибудь конкретную книгу?, если вы знаете одну на испанском, я буду очень признателен, потому что я не очень хорошо говорю по-английски. Спасибо за все, я все еще тестирую API.
4. В моей LINQPad «Маршалы (неуправляемый тип. LPTStr)» часть приводит к появлению странных китайских букв в результате, удаление атрибута приводит к правильному пути с латинскими буквами. Есть идеи, почему возникает эта ошибка? LINQPad 32-разрядный, работает под 64-разрядной Win7, но это не должно иметь значения.
5. @RolandPihlakas: Хм, я забыл, если вам нужно
CharSet = CharSet.Auto
, попробуйте поместить это внутрьDllImport
?