【问题标题】:What does "cannot be marshaled by the runtime marshaler" mean?“运行时封送器无法封送”是什么意思?
【发布时间】:2011-10-07 08:35:12
【问题描述】:

在编译 C# ASP.NET 应用程序时,我收到了来自 Visual Studio 2008 的奇怪警告。谁能指出我对这个警告的含义的解释(如果可能的话,用几个音节的话)?

“IasHelper.Process”的至少一个参数不能是 由运行时封送处理程序封送。因此,这样的论点将是 作为指针传递,可能需要不安全的代码来操作。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    听起来您正在引用一个 ActiveX 对象,并且它使 tlbimp.exe 很难编组 COM 和 .NET 之间的一些方法和结构成员的参数。

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

    【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2020-03-06
    • 2011-10-12
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多