所以我正在使用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()。
我的问题是,我该如何解决这个问题?这看起来是内存泄漏吗?
答案 0 :(得分:1)
从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();
google错误代码并查看其含义