代码之家  ›  专栏  ›  技术社区  ›  Brian

为什么(不正确地)使用ref myarray[0]传入数组有效,但仅在32位应用程序中有效?

  •  2
  • Brian  · 技术社区  · 14 年前

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

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

    方法1(错误的方式):

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

    方法2(正确的方式):

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

    应用程序是为32位计算机上的CPU类型“Any”编译的,方法1和方法2都按预期工作和行为。 在64位计算机上,只有方法2工作正常。对于方法1,应用程序只能看到数组的第一个元素。数组的其余部分都归零了。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Sam Skuce    14 年前

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

        2
  •  0
  •   James King    14 年前

    你在加载什么DLL?会不会是WinSxs处理的?

    推荐文章