我的.Net应用程序在windows ce 6上运行(在Toradex上)。 有时它会卡住,我想创建一个转储文件。 我创建了一个调用
的应用程序CaptureDumpFileOnDevice(DWORD dwProcessId, DWORD dwThreadId, LPCWSTR pwzExtraFilesPath)
但它始终返回0
和GetLastError
= ERROR_INVALID_PARAMETER
。即使我为0
传递值Ids
(表示当前进程和当前线程),也为路径传递null。
我在注册表中找不到相关的密钥(请参阅https://msdn.microsoft.com/en-us/library/aa526063.aspx),因此我添加了' DumpDirectory'并且' DontUpload'密钥。
ERROR_INVALID_PARAMETER
吗? 编辑: 代码中的用法:
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice
( uint dwProcessId,
uint dwThreadId,
string pwzExtraFilesPath);
[DllImport("coredll.dll")]
private static extern uint GetLastError();
static void Main(string[] args)
{
var result = CaptureDumpFileOnDevice(0, 0, null);
if (result == 0)
{
Console.WriteLine("Error! failed to capture dump file for thread id {0} got {1}, {2}",
threadId, Marshal.GetLastWin32Error(), GetLastError());
}
}
答案 0 :(得分:0)
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice( uint dwProcessId, uint dwThreadId, string pwzExtraFilesPath);
这看起来非常错误。 尝试:
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice( unsigned long dwProcessId, unsigned long dwThreadId, InptPtr pwzExtraFilesPath);
如果要传递字符串,请使用
将其转换为C风格的unicode字符串Marshal.StringToCoTaskMemUni(YourStringHere)
为了通过null
- 改为通过IntPtr.Zero
。