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 和 运行 我的程序中,然后它运行良好。我希望这对以后的人有帮助
我有一个使用 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 和 运行 我的程序中,然后它运行良好。我希望这对以后的人有帮助