Я пытаюсь вызвать метод WaitForSingleObject из C#, как описано здесь:Вызов WaitForSingleObject из C#
https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx
Для того, чтобы вызвать эту функцию мне нужно создать ручку, или мне нужно получить Handle типа IntPtr, как это можно сделать?
Я пробовал эту функцию, что я нашел: http://www.pinvoke.net/default.aspx/kernel32.WaitForSingleObject
[DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
public static extern IntPtr CreateEvent(HANDLE lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName);
Или, например, когда я получаю ручку из консоли:
IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
Он бросает DllNotFoundException.
В чем проблема?
Мне нужно это для того, чтобы запустить процесс с помощью этого вызова функции, и принять дамп из его процесса, для изучения библиотеки ClrMd.
Любая помощь будет оценена по достоинству.
Пример кода:
static void Main(string[] args)
{
var autoEvent = new AutoResetEvent(false);
//this is where I get the DllNotFoundException
WaitForSingleObject(autoEvent.Handle, WAIT_TIMEOUT);
}
[DllImport("kernel32.dll")]
static extern uint WaitForMultipleObjects(uint nCount, IntPtr[] lpHandles, bool bWaitAll, uint dwMilliseconds);
public const Int32 WAIT_TIMEOUT = 0x102;
Вопрос гораздо лучше: почему вы хотите это сделать (текущее объяснение - это путаница, если не сказать больше). Единственная причина - если вы взаимодействуете с существующей библиотекой, но в этом случае у вас, очевидно, уже есть дескриптор. Во всех других ситуациях существуют классы C#, которые лучше использовать. В любом случае, если нет такой вещи, как «coredll».dll ", это все в kernel32, так как в документации написано – Voo
Ну, единственный ответ, который я могу дать вам на тему« почему », просто потому, что я пытаюсь разобраться, я пытаюсь понять, почему он не работает ... –
Когда я использую Process.GetCurrentProcess(). Handl - я получаю Невозможно загрузить DLL 'coredll.dll': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) –