gpt4 book ai didi

c# - 为什么(错误地)使用 ref myarray[0] 传递数组有效,但仅在 32 位应用程序中有效?

转载 作者:行者123 更新时间:2023-11-30 22:42:58 25 4
gpt4 key购买 nike

我曾经在一些互操作中做了一些愚蠢的事情(使用 DllImport),但它仍然可以在 32 位机器上工作。

在导致方法 1 行为不同的 64 位应用程序上有什么不同的做法(为什么?)?

方法一(错误方式):

ref byte param   //Signature of `DllImport`ed function
ref myarray[0] //Parameter passed in when calling function

方法二(正确方式):

byte[] param   //Signature of `DllImport`ed function  
myarray //Parameter passed in when calling function

无论哪种方式,导入函数最终看到的地址应该是第一个数组元素的地址。由于数组将在内存中连续分配,因此我的预期是这两种方法是等效的。

应用程序是为 CPU 类型“Any”编译的。在 32 位机器上,方法 1 和方法 2 都有效,并且按预期运行。在 64 位机器上,只有方法 2 可以正常工作。使用方法 1,应用程序只能看到数组的第一个元素。数组的其余部分被清零。

最佳答案

64 位框架可能会在函数调用之前复制到某个临时存储空间,然后在函数完成后将该数据复制回原始“ref”参数。

关于c# - 为什么(错误地)使用 ref myarray[0] 传递数组有效,但仅在 32 位应用程序中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com