相关疑难解决方法(0)

如何在Visual Studio中调试时执行GetLastError()

您正在单步执行C/C++代码,并且刚刚调用了失败的Win32 API(通常通过返回一些无用的通用错误代码,如0).您的代码不会进行后续的GetLastError()调用,您可以检查其返回值以获取更多错误信息.

如何在不重新编译和重现故障的情况下获得错误值?在Watch窗口中输入"GetLastError()"不起作用("语法错误").

debugging winapi visual-studio

45
推荐指数
2
解决办法
2万
查看次数

DllImport - PreserverSig和SetLastError属性

在MSDN上,我找到了以下两个属性的描述:

PreserveSig将PreserveSig字段设置为true,以使用HRESULT或retval值直接转换非托管签名; 将其设置为false以自动将HRESULT或retval值转换为异常.默认情况下,PreserveSig字段为true.

SetLastError使调用者能够使用Marshal.GetLastWin32Error API函数来确定执行方法时是否发生错误.在Visual Basic中,默认值为true(这会增加一些开销); 在C#和C++中,默认值为false.

我的问题是:这两者如何相互关联?假设我将PreserveSig设置为'false' - 这意味着我应该将HRESULT转换为异常 - 如果非托管函数返回指示错误或没有错误发生的整数,那么如何将其转换为异常?

另外,为什么我需要调用GetLastWin32Error方法,如果我以某种方式设法使用PreserveSig提取异常?

亲切的问候PK

interop dllimport

9
推荐指数
1
解决办法
3341
查看次数

标签 统计

debugging ×1

dllimport ×1

interop ×1

visual-studio ×1

winapi ×1