问题始于对尚不支持的单声道功能的函数调用。调用是从一个名为MWARRAY.DLL(.net版本2.x)的关闭matlab DLL进行的,这个dll通常与VS .NET一起使用,如果你使用.net 3.5就可以使用。
函数是:[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent(bool)
我可以想到一些可能的解决方案,但我不确定如何做到这些:
对于我使用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
我想知道是否有人知道建议的解决方案路径,或其他任何可能会想到的内容?
答案 0 :(得分:2)
这已经解决了。
使用.net反射器提取mwarray.dll,可以从visual studio中更改代码。
在第330行的MCR()类中,有一个对getcurrent()的调用。替换为= null;