“cannot be marshaled by the runtime marshaler”是什么意思?

17
我在编译一个C# ASP.NET应用程序时,在Visual Studio 2008中收到了奇怪的警告。请问有人能向我解释这个警告的含义吗?以下是警告内容:

至少有一个'IasHelper.Process'的参数无法被运行时编组器编组。因此,这些参数将作为指针传递,并且可能需要使用不安全代码来操作。

2个回答

10

Marshal类负责将非托管代码/类转换为托管类,反之亦然。请参阅Marshal Class的MSDN文档

如果您包含某些Interop程序集以访问COM对象或类似对象,则可能会出现Marshal(l)er无法处理该操作的情况。因此,您的程序中存在准非托管部分,这可能导致像缓冲区溢出等不良后果。这样,您就离开了托管代码的安全、舒适世界,进入了C/C++及其可怕兄弟的寒冷、危险境地。:-)


1
谢谢。该参考链接指向(http://justlikeamagic.com/2010/03/09/marshaling/),其中包含了详尽的内容。 - Brian Hooper

9
听起来你在引用一个ActiveX对象,它让tlbimp.exe在COM和.NET之间传递一些方法和结构成员的参数时遇到了困难。
这可能发生在清理编译期间,因为那是tlbimp必须运行的唯一时间。请尝试进行未清理的普通构建。

谢谢。我刚刚偶然发现了这个帖子(http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/92cc0495-729b-40be-a49c-00676c21b8e3),其中一个人遇到了同样的问题。这真是令人担忧,不是吗? - Brian Hooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接