Поэтому я работаю с оболочкой c # в библиотеке C ++ и пытаюсь добавить еще одну функцию. Я создал объявление функции в C #, и она работает. Но это работает только один раз. Когда я пытаюсь запустить его во второй раз, программа зависает.
Определения и декларации взаимодействия https://github.com/joshglenn/interception-cs/blob/master/kchordr/Program.cs
код, который я запускаю, находится здесь: https://github.com/joshglenn/interception-cs/blob/master/kchordr/InterceptionDemoForm.cs
Функция, которая работает в первый раз, но зависает при втором запуске, называется GetHardwareID ().
Мой вопрос, как я могу устранить это? Кажется ли это утечка памяти?
чтобы получить код ошибки из вызова WinAPI, используйте Marshal.GetLastWin32Error ();
Также не забудьте украсить ваш звонок с помощью «Set Last Error = true»;
Вот пример, который я имею для вызова всплывающего окна на значке панели задач:
[DllImport("shell32.dll",SetLastError=true)]
public static extern bool Shell_NotifyIcon(uint dwMessage, [In] ref NotifyIconData pnid);
использование:
//call your code like you usually call the method
bool callResult = Caller.Shell_NotifyIcon((uint)NotifyIconMessage.NIM_ADD, ref n);
//afther that call the GetLastError to get the error code
int errorCode = Marshal.GetLastWin32Error();
гугли код ошибки и посмотри что это значит
Других решений пока нет …