我可以通过COM发送对象列表吗? 我有我的课,还有一个这个班的名单。我需要通过COM函数发送它。我可以这样做吗?如果是,那么如何?我需要序列化封送吗?如何通过COM发送列表
0
A
回答
1
如果接口的一边用“简单”类型的系统(比如VB6或脚本)编写,那么SAFEARRAY就是要走的路。 COM的通用编组可以照顾它。
如果你在接口的两边都有C++,并且很高兴在IDL中定义接口并生成自定义编组代码,那么IDL包含一个可以使用的“size_is”属性。详情请参阅here。
0
在任何合理的程度上,std :: list都无法这样做。我确信有一些疯子可以管理它,但从我的经验来看,这不值得。如果不必是一个std :: list和一些链表,那么你必须定义一个新的COM接口并提供它的实现(它可以是std :: list的一个包装)或者找到一些第三方资源,适合您的目的。如果你没有太多的实现COM接口的经验,那么你需要做大量的阅读。
如果它可以是一个数组,那么你可以通过使用SAFEARRAY使你的生活变得更简单。 SAFEARRAYs可以更容易地与ATL的CComSafeArray一起使用,这几乎是一个包装。在处理COM对象时,它会尝试帮助您解决问题,例如引用计数。然后你可以在COM对象之间传递数组。只是要提醒你,你仍然需要关注谁来解除分配内存。
2
COM没有固定任何特定的集合类型,它当然没有任何标准建模列表。按照惯例,您可以使用接口为任何集合建模。所以说你有一个Foo对象的集合,每个都实现IFoo。然后声明类似于IEnumFoo接口:
interface IEnumFoo : IUnknown
{
HRESULT Next([in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)] IFoo **rgelt,
[in,out,unique] ULONG *pceltFetched);
HRESULT Skip([in] ULONG celt);
HRESULT Reset();
HRESULT Clone([out] IEnumFoo **ppenum);
}
,然后只需一个接口指针返回到该接口的实现,以允许客户端代码来枚举列表。 IEnumVARIANT检查MSDN docs,IEnumVARIANT是一个非常常见的枚举接口类型。这也解释了这些方法的作用。
相关问题
- 1. 通过DatagramSocket发送列表?
- 2. 通过URL发送列表
- 3. 如何通过Powershell发送日期/时间到COM端口?
- 4. 如何通过COM
- 5. 如何发送阵列通过AJAX
- 6. 如何通过表单发送$ _POST?
- 7. 如何通过TCP发送哈希表?
- 8. 与列表发送模式,通过AJAX
- 9. 通过GET请求发送JSON列表
- 10. 如何通过node.js来发送通过TCP发送的消息?
- 11. 通过MPI_Bcast发送列
- 12. 枚举列表通过C#COM互
- 13. 通过发送列表发送数据库<record>
- 14. 如何通过API(WCF)发送派生类型的列表.NET
- 15. 如何使用通过型号列表发送的数据
- 16. 如何通过套接字发送列表java
- 17. 如何通过上次发送组织邮件列表
- 18. 如何通过我的页面发送数据到mailchimp列表
- 19. 如何通过RECT在COM
- 20. 通过ajax发送表单?
- 21. 发送通过表单
- 22. 如何通过API.AI发送传送带?
- 23. 如何通过服务发送通知
- 24. 通过网络发送多个列表(列表清单)
- 25. 如何通过卷发或终端发送Ionic推送通知?
- 26. 如何通过Skype4Java通过Skype发送邮件和发件人
- 27. 无法通过串行/ COM端口发送MIDI数据C
- 28. IStream COM读缓冲区,然后通过winsock发送
- 29. Windows提示通过COM端口读取和发送文本
- 30. 通过domain2.com从[email protected]发送邮件时应用dkim
我认为你需要设置一个小的自定义编组,除了某些非常特殊的情况。请注意COM有它自己的称为SafeArray的序列。您可以将其用作中介。 –
你可以参考我的网站或代码, –
像https://www.google.com/search?q=com+safearray,例如,从http://vcfaq.mvps.org/com/4开始。 htm –