佚名通过本文主要向大家介绍了atl34砂轮,atl方形动力电池,atl80.dll官方下载,atl71.dll一键修复,atl71.dll修复等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 为什末同样的ATL的DLL到了VC。NET中就会异常,请教高手?
描述:
解决方案1:
描述:
我在VC。NET中用建立了一个ATL的DLL程序,在接口中加入了两个结构A,B。A中包括了一个B[10]的成员。又定义了一个函数FUN([in,out]A* a);在此函数中对a的成员进行了复值,(包括对B[10]数组的复值),编译后,在VB。NET中引用了此DLL,然后定义了一个A的对象,public a as new A,然后调用函数FUN(a).调用时发生了异常TypeLoadException,说无法封送A中的结构B。
我又作了其它的试验,发现如果A中只有一个B类型的成员,而不是B[10]的数组成员,就可以正确调用。而且这样的写法在VC中做得DLL在VB中调用是正常的,但是当升级到VC。NET和VB.NET中就发生了异常,该怎样解决呢?
解决方案1:
《IDL精髓》说:数组传送必须显示指定其长度,而你在A中隐藏了一个数组,COM在封装类A时,B[10]只是被封装成一个指针数值[32位整数],调用时(特别是跨语言时,有一个WRAPPER做中介)当成数组来使用,当然会出现异常了(即使经过列集)。所以你必须显示指定其长度。
解决方案2:HRESULT forexample([in]LONG nItem,[in,sizeis(nItem)A *a])