在我的解决方案中,我已经写下了以下内容:
在假设CopyFileEx被导出时使用了带有SetLastError = true参数的DllImport属性的情况下,我有机会在这里获得任何未停止的异常吗?
我特别关注包含在RuntimeWrappedException实例中的非CLR异常。在C++中,“throw 1”是一个有效的结构。那么我应该从这样的P/Invoke调用中期望哪些异常,我在哪里可以获取有关异常的信息(MSDN没有提到CopyFileEx的异常)?
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern unsafe bool CopyFileEx(string lpExistingFileName,
string lpNewFileName, CopyProgressRoutine lpProgressRoutine, IntPtr lpData,
Boolean* pbCancel, CopyFileFlags dwCopyFlags);
...
bool result;
unsafe{
result = CopyFileEx(sourceFile, targetFile, null, IntPtr.Zero,
null /* pointer */, 0);
}
if(!result)
Win32Exception exc = new Win32Exception(Marshal.GetLastWin32Error());
// parameter could be omitted according to Win32Exception constructor
// implementation
在假设CopyFileEx被导出时使用了带有SetLastError = true参数的DllImport属性的情况下,我有机会在这里获得任何未停止的异常吗?
我特别关注包含在RuntimeWrappedException实例中的非CLR异常。在C++中,“throw 1”是一个有效的结构。那么我应该从这样的P/Invoke调用中期望哪些异常,我在哪里可以获取有关异常的信息(MSDN没有提到CopyFileEx的异常)?