【发布时间】:2018-12-04 20:30:54
【问题描述】:
所以我一直在使用urlmon.dll 的帮助来获取This 答案中建议的文件数据的 MIME 类型,并且它在 Windows 7 中运行良好。
但是,在 Windows 10 上,当尝试从 mime 指针创建字符串时,相同的代码会生成 System.AccessViolationException。
这是有问题的代码:
uint mimeType;
FindMimeFromData(0, null, data, 256, null, 0, out mimeType, 0);
var mimePointer = new IntPtr(mimeType);
//Exception is thrown on the next line
var mime = Marshal.PtrToStringUni(mimePointer);
代码在 Windows 7 和相同的文件上运行良好,但是在 Windows 10 上运行时我突然遇到访问冲突。
有没有其他人遇到过这个错误?
【问题讨论】:
-
您是否在管理模式下运行过它?还有您无法从文件扩展名中获取
mimetype的原因吗? -
@AndrewE 是的,我尝试以管理员身份运行,但它不起作用(也不是解决方案,因为普通用户将在公司计算机上使用它,没有管理员权限)。我确实考虑了扩展名,但很多时候我使用的文件类型与扩展名不匹配(怪我们的客户),我更喜欢自己检查。
-
Windows 10 是 3 年前发布的,所以这不是“其他人是否遇到过这个”错误。它是目前唯一受支持的 Windows 版本。缓冲区可能太小,或者指针类型错误,或者您可能在 64 位机器上使用了 32 位版本的 DLL。至少,发布完整的异常,包括它的调用堆栈。您可以通过
Exception.ToString()轻松获取。 -
@Banana 试试看,你试过把
Platform Target改成x64 -
@AndrewE 是的,我有,事实上这是我尝试的第一件事,但无济于事
标签: c# marshalling