不支持的MONO函数“System.Security.Principal.WindowsIdentity.GetCurrent(bool)”使用UNITY3D和MATLAB的MWARRAY.DLL

时间:2012-01-16 06:11:16

标签: c# matlab mono unity3d windows-identity

问题始于对尚不支持的单声道功能的函数调用。调用是从一个名为MWARRAY.DLL(.net版本2.x)的关闭matlab DLL进行的,这个dll通常与VS .NET一起使用,如果你使用.net 3.5就可以使用。

函数是:[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent(bool)

我可以想到一些可能的解决方案,但我不确定如何做到这些:

  1. 反编译DLL并用类似的工作函数替换字节代码:[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent() 注意没有传递给函数的布尔值
  2. 编译mono并自己编写函数
  3. 使用旧版本的MWARRAY.DLL(无法找到,但可能仍然使用相同的代码)
  4. 对于我使用IDA的反编译。 我找到了第一个函数调用的位置,CIL + HEX下面

    loc_38B1:    
    ldsfld  native     
    int [mscorlib]System.IntPtr::Zero   
    stloc.s 7    
    ldc.i4.0
    stloc.s 8
    ldc.i4.1
    stloc.s 9
    ldc.i4.1
    call    class [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent(bool)
    stloc.s 0xA
    call    void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::PrepareConstrainedRegions()
      .try {
    ldc.i4.0
    stloc.s 0xB
    br      loc_3982
    

    调用和stloc命令的HEX:

    28 96 00 00 0A 
    

    我还编译并反编译了我自己的dll,调用这两个函数只是为了查看另一个命令在字节码中的外观:

    loc_3AE:
    call    class [mscorlib]System.Security.Principal.WindowsIdentity [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent()
    callvirt class System.String [mscorlib]System.Security.Principal.WindowsIdentity::get_Name()
    stloc.s 8
    ldc.i4.1
    

    以粗体显示的自定义编译/反编译行的十六进制:

    28  00 00 0A 6F 1B 00 00 0A  13 08 17
    

    我想知道是否有人知道建议的解决方案路径,或其他任何可能会想到的内容?

1 个答案:

答案 0 :(得分:2)

这已经解决了。

使用.net反射器提取mwarray.dll,可以从visual studio中更改代码。

在第330行的MCR()类中,有一个对getcurrent()的调用。替换为= null;