C# 传递数组参数到 COM && COM 返回数组到 C#

C++定义DLL,C#调用 数组传递 第一部分 c++ 关键程序文件: xxx.idl   1 [id(DISPID_ABOUTBOX)] void AboutBox();2 [id(4)]  short IReadPort(unsigned char *inPArr1);//byte类型接口, 在非托管语言中可以正常使用,托管语言中无法正常传入数组3 [id(3)]  short I1(void* a1);//与c#的传... 阅读详情

C# 传递数组参数到

C# 调用

string []dropFiles = {“1”, “2”, “3”};

object fileList = dropFiles;

comWrapper.somemethod( ref fileList);

 


C++ COM函数定义

STDMETHODIMP CcomWrapper::somemethod( VARIANT* fileList )
{
 。。。。。。。

 ong len=fileList->parray->rgsabound[0].cElements;

 BSTR *pData=new BSTR[len];
 for (LONG i=0;i < len; i++)
 {
  ::SafeArrayGetElement(fileList->parray,&i,pData+i);
 }

 。。。。。。。。
}

 

 COM 返回数组到 C#

 

COM

[id(16), helpstring("method GetAllButtons")] HRESULT GetAllButtons([in] IUnknown* pDSMenu,[out,retval] VARIANT* ppButtonList);

 

STDMETHODIMP CCDSProjectUtilitiesProxy::GetAllButtons( IUnknown* pDSMenu, VARIANT* ppButtonList)

 

{

HRESULT hr = S_OK;

 

CComSafeArray<VARIANT> m_sa;

 

IDSMenuPtr spMenu =  (IDSMenuPtr)pDSMenu;

 

if(spMenu)

 

{

DSSortedButtonVec btnCmdVec(spMenu);

 

for( int x=0; x < (int) btnCmdVec.size(); x++ )

 

{

CComPtr<IDSMenuButton> spBtn = btnCmdVec[x];

 

if( spBtn != NULL )

 

{

m_sa.Add(CComVariant(spBtn));

 

}

}

CComVariant var(m_sa);

 

var.Detach(ppButtonList);

 

}

return hr;

 

}

 

 

C#

bject buttonsArray = projectUtilitiesProxy.GetAllButtons(dsMenu);

 

C#调用vb dll 参数传递--数组、整型等(c#调用com) 本例子中实现在c#中调用由vb生成的dll文件(com调用)例子由两个主要步骤组成:一 为在vb中生成有参数和返回值的dll ;二 是在c#中引入步骤一中生成的dll,然后生成实例调用步骤一:首先在vb中新建一个ActiveX DLL 工程,然后在类模块文件中填入以下代码'********************基础类型的测试*******************Public Function fncStrTest(ByVal str As String) As StringfncStrTest = str 阅读详情

相关推荐

com组件编程参数类型转换

VC++ 在com组件编程中经常遇见类型转换问题,这里提供了几种方法

刀与剑-COM返回数组

COM明明是一种编程思想,是一门绝世武功。可时代忽然迈入火器,无数人抛弃掉这晦涩难懂的绝世武功,转身投入速成的技艺时代。 “很多不懂 com 的C++程序员会自行发明一个 com 的子集,而且是蹩脚的多的子集。可惜的是,刀与剑的时代结束了,火器时代,掌握 com 这类武功已经没用了。” ---知乎网友 关于使用COM接口返回数组 COM处理了未知语言在COM客户之间传递数组,没错。但是这个并不是什么GO之流,而是C#、VB、Delphi、asp之流甚至...

qq_31314583的博客 460

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

在COM/DCOM中如何将数组作为函数返回的类型传递

在进程内自动化服务器中定义一个函数方法,需要在函数返回时,返回多个值,这就需要采 用数组的类型,比如,我定义了一个方法: function Calculate(inputtime: Integer): PSafeArray; safecall; 需要返回一个数组,如何实现呢?是否采用safearray类型呢? 在定义参数时采用的是safearray类型,怎么实现呢? 参考D5开发人员指南 2...

weixin_30341745的博客 80

WINDOWS下SIP拨号的实现

在WIN10上拨打SIP电话  由于我的交换原理实验有一个是关于SIP的抓包的。而之前从未接触过SIP,所以在如何完成一次SIP拨号上遇到了不少问题,查了好多资料都没有完整的或者写的很清楚的,这里就对那些资料做一个总结,给出一个比较完善的解决方案,一来是记录此次实验的收获,而来也可能为其他有同样困惑的人解惑。  废话不多说直接开始。首先是下载一个可以拨打SIP电话的客户终端,这里我选择的是MicroSIP, 下载红圈内的文件,下载好之后直接一路安装即可,没有什么特别注意的地方。  安装好客户端之后,就需要注

weixin_43918519的博客 3807

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真)

本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。

weixin_42696271的博客 398

java向c++传递字符串数组 com,C#:将字符串数组传递给c++ dll / dylib

我无法从我的c#代码传递一个字符串数组到我的c ++ dylib函数。C#代码:[DllImport("array2d.dylib", EntryPoint = "process_array", CallingConvention = CallingConvention.Cdecl)]public static extern int process_array(String[] a, int b)...

weixin_31693025的博客 230

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

.NET中如何在调用COM的时候得到返回参数值

如果COM组件的接口参数含有[out]或者[in,out]返回参数(在VB开发的COM组件里面是ByRef),那么,除了上面的做法之外,还得需要额外做一些工作。你必须得告诉Type.InvokeMember()接口参数里面哪些参数是一个[in][in,out]或ByRef的参数,否则,你将得不到任何的返回参数值。在调用接口中,如果第N个参数是一个引用的参数,那么,第N个Item属性必须要赋值为true来告诉Type.InvokeMember()这是一个引用的参数。// 设置第二个参数为返回参数。

biyusr的专栏 494

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1549

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1921

C#与MATLAB之间传递参数(二)

M类型,它是M文件的编译后内部的标准类型,一切C++/C#类型都要最终转换成此类型,方可作为参数调用M语言函数。总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。M的字符串类型,使用它可以将M中的字符类型转换成C++/C#的字符串类型。将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。将M类型转换成C#的长整C/C++/C#数据型类型;

Pei_hua100的专栏 1300

【DRAM存储器一】基本存储单元、阵列结构、读写原理

详述DRAM存储器存储单元、存储阵列结构和读写原理

highman110的博客 7257

c 与matlab 变量传递参数,C#与MATLAB之间传递参数

​XY苹果助手mac版v2.5.19.3835 官方最新版类型:Mac其他软件大小:63.9M语言:中文 评分:10.0标签:立即下载C#与MATLAB之间传递参数MWNumericArray是MWArray和c#中数据的中间类, 怎么用?怎样在C参数?a.double型、int型等数值类型的变量传递MWNumericArray i = null, result = mydouble;i=4;my...

weixin_30490729的博客 519

学Simulink——基于Simulink的PMSM矢量控制(FOC)从零搭建

《Simulink下PMSM矢量控制(FOC)全流程开发指南》 本教程系统讲解了基于Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)实现方法。主要内容包括:FOC控制原理与双闭环架构设计、Simulink建模全流程(含PMSM本体建模、坐标变换、PI控制器设计等)、关键调试技巧以及工程扩展方向。教程以48V伺服电机为例,详细演示了从Clarke/Park变换到SVPWM生成的完整实现过程,并提供了参数配置建议和常见问题解决方案。通过本教程,读者可掌握FOC系统的核心实现技术,为开发高性能电机

xiaoheshang_123的博客 273

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

.NET中如何在调用COM的时候得到返回参数值 (转)

.NET中如何在调用COM的时候得到返回参数值       在调用COM组件接口的时候,我们一般使用Type.InvokeMember()的方法来调用。Type.InvokeMember()在调用的时候需要接受一个Object类型的数组来传递接口的参数信息。对于那些仅仅包含有[in]或ByVal的接口参数,你只要构建这样的数组,并把它传给Type.InvokeMember()即可。      

wind2006的专栏 710

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VBA调用C#对象方法,传递double数组参数

 VBA方法可以通过COM Interop来调用C#对象方法。基本方法是公开.NET对象通过COM Interop,然后就可以调用.net 对象方法并传递参数了,但是参数如果包含double数组,VBA将出现如下错误信息"Function or interface marked as restricted, or the function uses an Automation type not s

veryhappy(wx.net)的专栏 5145

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C#与MATLAB之间传递参数

MWNumericArray是MWArray和c#中数据的中间类,怎么用?怎样在C#与matlab间传递参数?a.double型、int型等数值类型的变量传递MWNumericArray i = null, result = mydouble;i=4;myClass myclass = new myClass(); //实例化result = (MWNumericArray)m

1732

COM组件开发笔记--字符串数组的传递

COM编程的好处就是可以跨语言,我们公司是用C#做开发的,所以用C++去开发COM组件就可以弥补图形渲染性能上的不足。但COM组件也有它的缺点,就是COM接口本身的调用开销比较大,所以我总结了,使用COM组件最好是通过最少次数的接口调用来达到目的。所以数组的传递就至关重要了。打个最简单的比方,调10000次SetX( double x )花的时间肯定要比一次性把x数组传进去SetX( doub

Sayesan的专栏 1801

.NET中如何在调用COM时得到返回参数值System.Type.InvokeMember的使用

在调用COM组件接口的时候,我们一般使用Type.InvokeMember()的方法来调用。Type.InvokeMember()在调用的时候需要接受一个Object类型的数组来传递接口的参数信息。对于那些仅仅包含有[in]或ByVal的接口参数,你只要构建这样的数组,并把它传给Type.InvokeMember()即可。   如果COM组件的接口参数含有[out]或者[in,out]

不得闲.闲忆居 3612

在接口函数中传递数组参数

应用:ocx、com语言:vc++实现:定义参数时,选择类型为VARIANT例如:BOOL CMap3DAXCtrl::AddTrackLines(LPCTSTR sName, short nCount, const VARIANT FAR& lonArray, long clr, short nLineWidth) { // TODO: Add your dispatch handler cod

miranda的专栏 3192

结构体数组作为传出参数从C++封送到C#

由于工作需求,要把C++动态库里面的结构体数组通过参数传出来。网上也查了很多资料,在这里推荐一本书,《精通.NET互操作:P/Invoke、C++ Interop和COM Interop》,介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,虽然里面没有结构体数组的传参例子,但是原理懂了,自然也能写出来。

ldongz的博客 4197

MATLAB与C#之间传递参数以及Matlab与C#连接的几种方式比较

一MATLAB与C#之间传递参数 http://www.cr173.com/html/10249_1.html MWNumericArray是MWArray和c#中数据的中间类, 怎么用?怎样在C#与MATLAB之间传递参数? a.double型、int型等数值类型的变量传递MWNumericArray i = null, result = mydouble;i=4;myC...

weixin_30596023的博客 523
上一篇: Grand Central Dispatch(GCD)
下一篇: Android--多线程之Handler
王晓鹏
博客等级 码龄22年 58粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值