为什末同样的ATL的DLL到了VC。NET中就会异常,请教高手?

sky 2003-11-11 02:41:24
我在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中就发生了异常,该怎样解决呢?
...全文
24 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luohualiushui 2003-11-14
  • 打赏
  • 举报
回复
啊呀,对不起,是size_is,一个确定数祖长度的属性
sky 2003-11-13
  • 打赏
  • 举报
回复
sizeis又是什么呢,为什么在MSN中没有相应的说明呢?
sky 2003-11-13
  • 打赏
  • 举报
回复
nItem指的是什么呢,是指的a包括了多少个A的结构数吗,但是我希望的是a包括了10个B形的结构B b[10];怎样写呢?
luohualiushui 2003-11-12
  • 打赏
  • 举报
回复
HRESULT forexample([in]LONG nItem,[in,sizeis(nItem)A *a])
sky 2003-11-12
  • 打赏
  • 举报
回复
谢谢,但是怎样才算是显示指定了其长度呢?
cambest 2003-11-12
  • 打赏
  • 举报
回复
《IDL精髓》说:数组传送必须显示指定其长度,而你在A中隐藏了一个数组,COM在封装类A时,B[10]只是被封装成一个指针数值[32位整数],调用时(特别是跨语言时,有一个WRAPPER做中介)当成数组来使用,当然会出现异常了(即使经过列集)。所以你必须显示指定其长度。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧