VB、VC 混合编程(dll)中数组的传入传出.docVIP

VB、VC 混合编程(dll)中数组的传入传出.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VB、VC 混合编程(dll)中数组的传入传出 2008年10月23日 星期四 21:39 以前用到的神经网络都是在matlab中调的,而项目需要,要写个神经网络的算法,系统主界面是VB写的,在VB中做网络训练速度是不照的,用VB,VC的混合编程,但是一直被VB与Dll之间的数组传递这个难题所困扰,在网上搜了也找不到答案,据说safearray可以解决,但是看了下比较麻烦,在CSDN社区中也没有找到答案,但是社区中一个朋友的指点,给我找到解决问题的方法了。下面总结下共享。 数值型数组在VB中其数据是连续存放的,相当于一维的,而在C/C++中数组可以等价于指向数组第1个元素的指针。可以用引用的方式把VB中数组的第1个元素的地址传给VC编写的DLL,在DLL中用一个指针来接收,这样就实现了VB到Dll在中数组的传递。从DLL传递数组给VB方法相同,过程相反. 如果是二维数组,则把二维数组按照一维数组的方式传入传出,只是在使用的时候,顺便把二维数组的行和列数传递即可。 总体思想是这样的。下面看例子。 VC中: double _stdcall OneDimensionArrayTest(double *inArr,int nCount,double *outArr,int* ioutArrCount) //一维数组的传入传出 { int iNum=nCount; double *dRes=new double[iNum]; int i; for(i=0;inCount;i++) { dRes[i]=inArr[i]*2; } for(i=0;inCount;i++) { outArr[i]=dRes[i]; } *ioutArrCount=iNum; return dRes[0]; delete []dRes; } void _stdcall TwoDimensionArrayTest(double *inArr,int nRows,int nCols,double *outArr,int* outRows,int *outCols)//二维数组的传入传出 { double *dRes=new double[nRows*nCols]; int i; int j; for(i=0;inRows;i++) { for(j=0;jnCols;j++) { dRes[nCols*i+j]=inArr[nCols*i+j]*2; } } for(i=0;inRows;i++) { for(j=0;jnCols;j++) { outArr[nCols*i+j]=inArr[nCols*i+j]*2; } } *outRows=nRows; *outCols=nCols; delete [] dRes; } LIBRARY TestDll EXPORTS ; 此处可以是显式导出 Add @1 darray @2 OneDimensionArrayTest @3 TwoDimensionArrayTest @4 VB中 Declare Function OneDimensionArrayTest Lib D:\在编程序\Dll\VBLoadDll\TestDll.dll (ByRef inputer As Double, ByVal inLength As Long, ByRef output As Double, ByRef outLength As Long) As Double Declare Function TwoDimensionArrayTest Lib D:\在编程序\Dll\VBLoadDll\TestDll.dll (ByRef inputer As Double, ByVal inRows As Long, ByVal inCols As Long, ByRef outputer As Double, ByRef outRows As Long, ByRef outCols As Long) Private Sub cmdTest2_Click() Dim inputer(8) As Double Dim out(9) As Double Di

文档评论(0)

803322fw + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档