【发布时间】:2016-02-22 06:25:15
【问题描述】:
将参数从 C# 传递到 C++ 时,使用 [In, Out] 和仅使用 ref 有区别吗?
我发现了几个不同的 SO 帖子,以及来自 MSDN 的一些内容,这些内容与我的问题很接近,但并没有完全回答。我的猜测是我可以像使用 [In, Out] 一样安全地使用 ref,并且编组器的行为不会有任何不同。我担心它的行为会有所不同,并且 C++ 不会对我的 C# 结构被传递感到满意。我已经在我正在工作的代码库中看到了这两件事......
以下是我找到并阅读的帖子:
Are P/Invoke [In, Out] attributes optional for marshaling arrays? 让我觉得我应该使用 [In, Out]。
这三篇文章让我认为我应该使用 [In, Out],但我可以使用 ref 代替,它会具有相同的机器代码。这让我觉得我错了——因此在这里问。
【问题讨论】:
-
能否举个具体的例子。您想知道
[In, Out] ref int foo和ref int foo之间的区别吗?就目前而言,您的问题缺乏细节,我相信您需要一个(或多个)具体示例。 -
类似的,是:[DllImport("MyDll.dll", CallingConvention = CallingConvention.Cdecl)] private static extern bool myFunction([In, Out] SomeStruct[] aStruct; 和使用 ref 一样代替 [In, Out]。
-
另外,你是把 [In, Out] 和 ref ;) 结合起来了吗?
-
不,它们不一样。