TlbImp System.TypeLoadException:Int32 [49285]'的尺寸过多

时间:2018-07-25 08:29:48

标签: c# dll com tlb tlbimp

我有一个C ++内置的tlb,它使用SAFEARRAY;我用tlb importer生成DLL并用C#构建它,我尝试了诸如/sysarray/noclassmembers之类的不同选项来为方法生成不同的签名:

public void GetList(ref Array HHNums, ref Array PersNums)

public void GetList(ref int[] HHNums, ref int[] PersNums)

在两种情况下,我仍然会收到一个错误,抱怨System.TypeLoadException数组定义了太多维。如何解决此错误?

我的CMD输入为"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\tlbimp.exe" /sysarray /out:ADI /noclassmembers /namespace:A.namespace myDTI.tlb

1 个答案:

答案 0 :(得分:1)

这样做的原因是基于I converted the DLL into .il file我在网上阅读的ref关键字;我通过从方法的参数中删除[In]来修改代码:

instance void  GetListWithWeight([In][out] int32[]&  marshal( safearray int32) HHNums,
                                 [In][out] int32[]&  marshal( safearray int32) PerNums,
                                 [In][out] float32[]&  marshal( safearray float32) Wgts) runtime managed internalcall

它变成:

instance void  GetListWithWeight([out] int32[]&  marshal( safearray int32) HHNums,
                                 [out] int32[]&  marshal( safearray int32) PerNums,
                                 [out] float32[]&  marshal( safearray float32) Wgts) runtime managed internalcall

然后我将.il打包到一个DLL中并运行我的程序,然后它可以正常工作。我希望这对以后的人有帮助