如果我使用[MarshalAs(UnmanagedType.LPStr)]封送空指针会发生什么?

时间:2009-08-17 02:31:07

标签: c# interop null marshalling

如果我尝试编组一个真正是NULL指针的字符串,会发生什么?

4 个答案:

答案 0 :(得分:2)

从本机到托管,您将获得一个空字符串对象。从托管到本机,您将获得一个空指针。这很直观。 : - )

答案 1 :(得分:1)

当键入为字符串时,NULL值将在任一方向编组时转换为NULL的相应语言表示形式(C表示NULL,C#表示null)

答案 2 :(得分:0)

那你觉得怎么样? LPstr是指向以null结尾的ANSI字符数组的指针。 NULL显然不是指向空终止数组的指针。它可能会尝试读取NULL或其他东西。 在任何情况下,它的未定义行为,它将使您的应用程序崩溃或使其处于未知状态。你为什么这么想?为什么不在编织前检查呢?

答案 3 :(得分:0)

我想它会将NULL传递给底层API,这可能是也可能不是可接受的输入,具体取决于你所调用的内容。设计最好的C(++)代码会检查这类事情,但最好仔细检查。