【问题标题】:MarshalAs Query With Managed Code Calling Unmanaged使用托管代码调用非托管的 MarshalAs 查询
【发布时间】:2011-11-11 03:57:45
【问题描述】:

这个问题是this线程的结果。

我的问题是,为什么我们必须为某些参数指定 MarshalAs 属性而不为其他参数指定?我会认为 c++ 和 c# 数据类型之间的差异会大到需要编译器的指导?

请原谅我的无知,因为我以前从未处理过非托管代码:)

干杯, 亚当

【问题讨论】:

  • 那个声明是错误的,它只是因为他为字符串传递了空指针而起作用。实际上应该删除所有 [MarshalAs]。这就是危险。

标签: c# marshalling managed-code


【解决方案1】:

未编组的参数只是整数。整数是整数是整数是整数,无处不在,无论是否原生。所以不需要任何特殊的指令来处理它们,值只是按值传递,你就设置好了。

指针和字符串比较棘手。 C# 字符串不一定像 C 字符串那样表示,它只是指向以空字符结尾的字符数组的指针。内部转换可能是必要的。同样,数组需要通过引用传递 - 并明确告知这样做。

请记住,在非托管代码中,地址只是数据。他们没有什么特别的。因此,C# 编译器需要知道如何将它所知道的关于变量的所有信息转化为数字。

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2015-02-24
    • 1970-01-01
    • 2011-01-29
    • 2010-09-18
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多