【问题标题】:UnmanagedType.CustomMarshaler in windows 8.1 appWindows 8.1 应用程序中的 UnmanagedType.CustomMarshaler
【发布时间】:2013-12-19 07:44:17
【问题描述】:

我正在尝试为 windows 8.1 制作应用程序,并且作为应用程序的一部分,我正在尝试将 libgit2sharp 移植到 windows 8.1 类库(而不是可移植类库)。我已经设法转换了很多小问题,但是项目的很大一部分使用了UnmanagedType.CustomMarshalerICustomMarshaler,由于某种原因似乎不受支持。有没有办法让它工作,或者使用它的方法?

谢谢。

编辑:这里是 github 网址,如果您需要查看:https://github.com/mirhagk/windows8git

【问题讨论】:

  • 您在“错误”窗口中遇到的错误是什么?
  • 'System.Runtime.InteropServices.UnmanagedType' does not contain a definition for 'CustomMarshaler'The type or namespace name 'ICustomMarshaler' could not be found (are you missing a using directive or an assembly reference?) 是错误。如果您需要查看项目文件或任何内容,我已经修改了我的问题以包含 github url。

标签: c# .net windows-8.1


【解决方案1】:

这里没有令人愉快的答案。 System.Runtime.InteropServices.UnmanagedType 枚举来自 System.Runtime.InteropServices 引用程序集显式省略了 CustomMarshaler 枚举。当然,ICustomMarshaler 接口也不见了,就像编译器告诉你的那样。

您可以伪造 UnmanagedType.CustomMarshaler 值 (44),但无法伪造接口,您编写的替换版本将具有错误的类型标识。

这种遗漏是故意的。

请注意,这可能不是您唯一的障碍。如果您移植本机代码,则必须遵守已批准的 winapi 函数的白名单。这是一个short list。当您使用 SDK 标头时,它们会让您远离麻烦。但请确保永远不要修改 WINAPI_FAMILY 宏来解决编译错误,这并不能解决任何问题。仅仅复制一个 DLL 也不行。如果您这样做,商店验证程序将拒绝您的应用。

【讨论】:

  • 好吧,看起来我不会使用任何用于 C# 的 git 库,libgit2sharp 与本机程序非常紧密地联系在一起,而且他们其他人使用了很多不受支持的功能在 Windows 8 上。我将不得不看看我是否可以从其中一个中提取部分功能。
  • ps 我已将此标记为正确答案,但我会稍等片刻再颁发赏金。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2014-09-07
  • 2015-09-21
  • 1970-01-01
相关资源
最近更新 更多