“无法由运行时封送器封送”是什么意思?

时间:2011-10-07 08:35:13

标签: c# asp.net visual-studio-2008

编译C#ASP.NET应用程序时,我收到Visual Studio 2008中的奇怪警告。任何人都可以指出这个警告意味着什么的解释(用几个音节的话来说,如果可能的话)?

  

至少有一个'IasHelper.Process'的参数不能   由运行时封送器封送。因此,这些论点将是   作为指针传递,可能需要不安全的代码来操作。

2 个答案:

答案 0 :(得分:10)

Marshal类负责将非托管代码/类转换为托管类,反之亦然。见the msdn documentation of the Marshal Class

如果你包含一些互操作程序集来访问COM对象,那么可能会发生Marshal(l)er无法处理的操作。因此,你的程序中运行准非托管部分,这反过来会导致缓冲区溢出等令人讨厌的事情。因此,您可以离开托管代码的安全,舒适的世界,进入C / C ++和他们可怕的兄弟的通风,危险的领域。 : - )

答案 1 :(得分:8)

听起来你正在引用一个ActiveX对象,它给tlbimp.exe一个艰难的时间来整理COM和.NET之间的一些方法和结构成员的参数。

这可能发生在干净的构建期间,因为这是tlbimp必须运行的唯一时间。尝试在你没有先清理的地方进行正常构建。