TlbImp System.TypeLoadException: Int32[49285]' 的维度太多

TlbImp System.TypeLoadException: Int32[49285]' has too many dimensions

我有一个使用 SAFEARRAY 的 C++ 构建的 tlb;我使用 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

原因是 ref 我在网上看到的关键字,I converted the DLL into .il file;我通过从方法的参数中删除 [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 和 运行 我的程序中,然后它运行良好。我希望这对以后的人有帮助