2 guosw 69 guosw_69 于 2016.03.03 15:32 提问

VB 调用fortran函数(已经生成dll),怎么实现数组的传递? 20C

VB调用fortran生成的dll。传数值,我已经实现,但是传数组地址没成功,
但是用C语言就可以找到数组的首地址,但是VB就不行,请VB的高手指教

fortran 代码如下(生成dll):

subroutine ComputeFwd_DC1D(Pm,nParams,AB2,nd)
!DEC$ ATTRIBUTES REFERENCE::Pm,nParams,AB2,nd
implicit none
integer i
integer nParams,nd
!real(8),dimension(1:nParams):: Pm
!real(8),allocatable::Pm(:)
!real(8) Pm(10)
real(8) Pm(nParams)

real(8) AB2

do i=1,nParams
Pm(i)=150
enddo

!Pm(1)=0

AB2=AB2+1000

nd=nd+10

return
endsubroutine ComputeFwd_DC1D

VB代码:

前面需声明:
Private Declare Sub COMPUTEFWD_DC1D Lib "TEST1.dll" (ByRef Pm() As Double, ByRef nParams As Integer, ByRef AB22 As Double, ByRef nd As Integer)

    调用时:
        Call COMPUTEFWD_DC1D(Pm, nParams, AB22, nd)

    Pm是数组,但是无法传递数组,AB22是单个数,就可以传递     

7个回答

caozhy
caozhy   Ds   Rxr 2016.03.03 15:33

VB也可以,直接传数组名。注意数据类型。

guosw_69
guosw_69   2016.03.03 15:42

数组名试过了,类型一致,但还是不行?你有实例?

guosw_69
guosw_69   2016.03.03 15:42

数组名试过了,类型一致,但还是不行?你有实例?

guosw_69
guosw_69   2016.03.03 15:43

数组名试过了,类型一致,但还是不行?你有实例?

guosw_69
guosw_69   2016.03.03 15:42

数组名试过了,类型一致,但还是不行?你有实例?

guosw_69
guosw_69   2016.03.03 15:43

数组名试过了,类型一致,但还是不行?你有实例?

guosw_69
guosw_69   2016.03.03 15:43

数组名试过了,类型一致,但还是不行?你有实例?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
传递VB数组给DLL中的函数
用C++builder6编写一个标准的DLL给VB6调用,需要从DLL取出字节数组,在VB中接收。 Private Declare Function OpenComm Lib "ScaleWeight" Alias "Open" (ByVal yibiaoType As String, ByVal Comm As String, ByVal Setup As String) As Boolean
在VB中调用C/C++语言编写的dll,数组参数的传递
动态链接库(dll)的好处就不多说了,这里就把如何在VB中调用VC写的dll函数的方法介绍一下,供有需要的朋友们参考,同时也免得自己以后忘了。 初次接触DLL的用户经常会遇到一个问题:在VC环境下创建的DLL,在VC里运行的好好的,可在VB应用程序中调用时却老是出现"调用约定错误"、"找不到入口点"之类的错误。这主要是由以下疏漏造成的。 首先,要注意DLL中的函数和VB中的函数声明
通过DLL实现Fortran和C++接口
Fortran和C++各有优势,C++无论是在编写Windows窗口还是在编程效率上都远远优于Fortran,但Fortran也有C++做不到的地方,在数值计算领域,Fortran的计算速度是众所周知的,因此,我们在编写程序时,尤其时数值计算方面的程序时,就不得不利用Fortran的计算速度.为此,我们常常用C++编写大部分代码,而耗时的计算代码用Fortran编写.这里,我们使用动态链接库实现这
C#调用FORTRAN编写的DLL
一般来讲,低级语言执行算法的效率高,而高级语言简单易用,尤其是图形用户界面(GUI)这方面很强大。现在的科学工程软件的开发流程一般都是用低级语言做算法,而高级语言做界面。fortran77在科学计算中一直独领风骚,而c#因其易用性以及强大的面向对象的特点备受青睐。 下面显示fortran与c#的交互的基本操作:(编程环境:VS2008(C#+IVF)) 1.使用fortran编写dll
VC实现一个库,并用VB(Visual Basic)来调用的方法,包括传递数组的方法
因为工作需要,最近写了一个VB小软件,很多功能已经用VC写好了,如果再用VB整一遍太麻烦。最好的方法将VC程序编译成dll库,然后用VB来调用就行了。虽然VB已经很老了,但是做一些小软件还是非常方便的,下面就来介绍如何将VC程序实现的crc校验程序编译成dll库,接下来介绍如何使用VB来来用,使用时注意参数要对应,特别是特别是数组传递要对应起来。 第一步:使用VC编译dll库    1.启动V
VB调用DLL时传递自定义类型数组参数注意
对于C/C++接口中的自定义类型,要给出对齐方式。如果调用者是C/C++,那么应当指定成相同的对齐方式;非C/C++且无自定义的能力,那么只能用byte数组自己组装和拆卸。 因为某个项目中曾经试图用Java来调用设备的控制接口,在C/C++中很简单的结构/联合体等,在Java中却不得不手工来编码,因为这个转化很耗费时间,与规定的宽限值相差几百万倍,所以不得不作罢;还有手工编码也很浪费开发时间,就百
Fortran三种数组传递方式
本文介绍了假定大小,假定形状,自动数组三种数组传递方式,并对比了其中的差别和优劣。适合新手阅读 Fortran 中,调用函数或子程序时,默认将实参的地址传递给形参,称为地址传递或引用传递。究其原因,是因为Fortran主要针对数值计算,参数多为大型数组(二维数组称矩阵),如果采用值传递,会复制实参的一个拷贝给形参,占用时间和内存,而地址传递则仅仅将实参数组的首地址传递给形参,没有时间和内存冗
VB中如何传递指针给DLL
 VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如果你传递的参数是普通的数据类型,在参数前什么都不要加就行了。如C语言声明为:     void __stdcall MyProc(short * nPara);     则VB声明为:     Declare Function My
用FORTRAN编写DLL的问题
用 FORTRAN 编写 DLL,导出 subroutine,可以在别的编程语言中进行调用,很是方便。不过,遇到一些问题会让人恼火,特在这里记录一下。 1. 导出声明,子程序调用 导出的话,只要作如下声明即可。名称必须与子程序名称相同,否则就找不到了。调用的时候,一律使用大写。       !DEC$ ATTRIBUTES DLLEXPORT :: fortfunc
用 FORTRAN 编写 DLL 的问题
 用 FORTRAN 编写 DLL,导出 subroutine,可以在别的编程语言中进行调用,很是方便。不过,遇到一些问题会让人恼火,特在这里记录一下。1. 导出声明,子程序调用导出的话,只要作如下声明即可。名称必须与子程序名称相同,否则就找不到了。调用的时候,一律使用大写。      !DEC$ ATTRIBUTES DLLEXPORT :: fortfuncC 语言中使用需要先声明函数原型,可