Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net (新对象[xxx])。在内存中加载CustomMarshalers.dll后,GetType()和typeof(对象[])返回不同的类型_.net_Com_Clr - Fatal编程技术网

.net (新对象[xxx])。在内存中加载CustomMarshalers.dll后,GetType()和typeof(对象[])返回不同的类型

.net (新对象[xxx])。在内存中加载CustomMarshalers.dll后,GetType()和typeof(对象[])返回不同的类型,.net,com,clr,.net,Com,Clr,(新对象[xxx])。GetType()在CustomMarshalers.dll加载到内存后开始返回不同类型的对象 它返回一个类型对象,该对象引用mscorlib.dll中的同一元数据记录,但其Type.Guid字段中填充了{9fa4230f-db51-34dd-b578-9c072c062046}值 它使用下一个语法“variable.GetType()==typeof(object[])”来中断任何检查变量类型的代码。因此,它会中断mscorlib.dll中的二进制反序列化程序。这反过来会

(新对象[xxx])。GetType()在CustomMarshalers.dll加载到内存后开始返回不同类型的对象

它返回一个类型对象,该对象引用mscorlib.dll中的同一元数据记录,但其Type.Guid字段中填充了{9fa4230f-db51-34dd-b578-9c072c062046}值

它使用下一个语法“variable.GetType()==typeof(object[])”来中断任何检查变量类型的代码。因此,它会中断mscorlib.dll中的二进制反序列化程序。这反过来会破坏WinForms中的许可证验证。这反过来又破坏了整个应用程序

背景:

我有一个非托管桌面应用程序,它加载并执行一组实现预定义COM接口的.NET对象。应用程序作为普通的非托管程序启动。然后,它发现需要加载的COM对象列表,加载它们,并执行预定义的约定。其中一些COM对象是在.NET中实现的

在将CustomMarshalers.dll加载到内存之前,.NET代码工作正常。NET代码在CustomMarshalers.dll加载到内存后开始到处失败

加载CustomMarshalers.dll是因为应用程序使用vbscript.dll执行VB6脚本(它是启动期间加载的那些模块的单独活动)。该脚本使用基于.NET的COM对象,该对象向脚本返回一些值。我认为.NET将CustomMarshalers.dll加载到内存中以封送这些值

其他信息:


属性AssemblyQualifiedName,ContainsGenericParameters,FullName,Namespace,如果对使用(新对象[xxx])接收的类型对象调用其中任何一个属性,则引发NullReference异常。GetType()。除Guid属性外,这两个类型对象的其他所有属性都完全相同。

什么是
xxx
?一个号码?我无法重现您的错误,我尝试从您提到的程序集中调用
EnumerableToDispatchMarshaler.GetInstance(“”)
,但它似乎没有破坏任何东西。你能发布显示问题的简短示例代码吗?是的xxx是一个数字。没有简单的代码来重现这个问题。它是一个非托管复制,执行VBA脚本,创建.NET COM对象,触发CustomMarshalers.dll加载到内存中。在此之后(新对象[1])。GetType()==typeof(对象[])开始返回False。我尝试执行VBA脚本,加载不加载CustomMarshalers.dll的.NET COM对象,一切正常。这就是我推断CustomMarshalers.dll导致该问题的原因。@svick-如果能够重现该问题,您将如何调试它?不起作用的代码是这样的:if((新对象[1]).GetType()==typeof(对象[]){//Some logic}。尝试减少代码的其他部分,直到它起作用为止。我想不出其他任何东西。@svick-你会从下一个代码中删除什么?:)if((新对象[1]).GetType()==typeof(对象[]){Debug.WriteLine(“告诉svick没有剩余的内容”);}