• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何编写com控件,使其向C#返回一个不定长数组?

如何编写com控件,使其向C#返回一个不定长数组?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了c#控件数组,c#编写activex控件,c#编写控件,c#timer控件的用法,c#自定义控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何编写com控件,使其向C#返回一个不定长数组?
描述:

近日用VC atl com编写一文件存储模块,需输入、输出大量字节流。
参考一无源代码的ocx控件,其在vc IDE中生成如下接口:
BOOL CDAQAI::GetBufferData(long BufferStart, long count, const VARIANT& ReturnedData)
而在C# IDE中,则出现下面两个接口:
public virtual bool GetBufferData(int bufferStart, int count, object returnedData)
public virtual object GetBufferDataEx(int bufferStart, int count)
其中后者返回一个类型为System.Single[]的数组。
我因初学COM,不知如何定义“引用类型参数”的接口函数,如用IDE直接加入引用类型参数的接口,则编译报错。
尝试写出如下接口函数:
interface Itt : IDispatch
{
[id(1), helpstring("method test")] HRESULT test([in] VARIANT v1,[out] VARIANT * v2);
};
STDMETHODIMP Ctt::test(VARIANT v1, VARIANT *pArray)
{
// TODO: Add your implementation code here
short ArrayBack[5];
    short Temp;
int i=0;
    SAFEARRAY* psa;//定义数组描述符
       SAFEARRAYBOUND bound[1] = { 5,1 };          //一维数组
       psa = SafeArrayCreate ( VT_I2, 1, bound );//创建数组
       _ASSERTE ( psa != NULL );
       for( i=0;i<5;i++){
              Temp = ArrayBack[i];
              SafeArrayPutElement(psa,(long*)&i,&Temp);
                            }
         
       pArray->vt = VT_ARRAY | VT_I2;//VARIANT类型定义,
       pArray->parray = psa; //数组传入返回值
       return S_OK;
}
则无论创建整形、字节型的SAFEARRAY,在C#均中得到一个实际类型为 System.Single[*] 的 Object,无法直接转换为数组。
请问如何定义及实现接口,方可在VC 及 C#中返回一个不定长数组。谢谢赐教,如获解决,另开贴送分。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 开发MFCActiveX控件中,选择什么样的参数类型,才能传入byte数组?
  • 能否传结构数组进COM控件里帮帮忙,各位大虾!
  • 如何编写com控件,使其向C#返回一个不定长数组?

相关文章

  • 2017-06-04 ATL做成的DLL如何单步跟踪啊?
  • 2017-06-05 二级线程调用pDoc->UpdateAllViewsNULL?
  • 2017-06-05 如何获得异常对话框的句柄
  • 2017-06-05 delphi做的dll,VC做的可执行文件调用,但dll源码里设断点,调试怎么不能跟踪进去?
  • 2017-06-04 ATL的数据类型难道真的没办法自定义了吗?
  • 2017-06-05 奇怪阿!为什么我的Softice下了函数断点,但怎么也拦截不下来?请进来帮一下忙看看吧,得到正解立刻把分都给你!
  • 2017-06-05 高分求解,CAsyncSocket制作dll
  • 2017-06-04 如何将已有的MFC对话框程序转化成ActiveX?
  • 2017-06-04 怎么调用activex
  • 2017-06-04 怎样用com+创建文件?用::CreateFile吗?有实例吗?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 终止线程的疑问!
    • ActiveX控件的问题
    • 做activex插件的cab包时,inf文件中的clsid应该是idl文件中的哪一个?或者随便编一个都没关系?
    • 如何使COM对象只起一个实例
    • 请教如何监测捕获子进程的内存恶意修改(如用FPE修改和WriteProcessMemory的修改)
    • 我在一个atldll重要将收到的字符窜保存成txt文件,该怎样做?刚学atl请大家关照。
    • excel宏的问题
    • 看了好多关于SAFEARRAY的贴子,但是其中没有一个可以解决在网页中调用的问题,试问:在脚本这种弱类型的语句中能用安全数组吗?
    • ocx比较莱鸟的问题:CFormView在ocx显示的问题?(请高手指教
    • 如何让一个线程等待,直到另一个线程结束。问题解决,立即给分。谢谢

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有