Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
call sub
Hi!
I wrote the code I pasted at the end of the mail to call a sub from a dll file. Apparently the code looks correct to me but instead of returning the correct value of z it gives me only zeros. Does someone of you see any mistake for example in the use of the call sub? Thank you Here is the code: Declare Sub asum Lib "D:\Dll\arr\koedll.dll" (x As Double, y As Double, z As Double, n As Integer) Sub koelarr() ' ' koelarr Macro ' Macro written 10/3/2003 by Claudia Dell'Era Try to link an array ' ' Dim x() As Double, y() As Double, z() As Double Dim n As Integer, i As Integer Worksheets("Sheet2").Activate n = Cells(2, 4) ReDim x(1 To n) As Double, y(1 To n) As Double, z(1 To n) As Double Worksheets("Sheet2").Activate For i = 1 To n x(i) = Cells(i + 1, 1) Next i For i = 1 To n y(i) = Cells(i + 1, 2) Next i Call asum(x(1), y(1), z(1), n) For i = 1 To n Cells(i + 1, 3) = z(i) Next i End Sub |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
call sub
Hi Chip
Thanx for your answer. "asum" is a simple function (x+y=z) I made to check if the "array passing" from the dll to VBA works.The real program I have to use in practice is much bigger but if already doesn't work with this... The dll is written in Visual Fortran. I paste the code since it is short. Thank you ! koedll.f90 ! ! FUNCTIONS/SUBROUTINES exported from koedll.dll: ! koedll - subroutine ! subroutine asum(x, y, z, n) implicit double precision (a-h,o-z) dimension x(n), y(n), z(n) ! Expose subroutine koedll to users of this DLL ! !DEC$ ATTRIBUTES DLLEXPORT::asum !DEC$ ATTRIBUTES ALIAS : "asum" :: asum ! Variables ! Body of koedll do i = 1, n z(i) = y(i) + x(i) end do return end subroutine -----Original Message----- Claudia, Your code looks good to me, and a quick test with a DLL written in C++ bears this out. How is your 'asum' function declared in the DLL? Remember an integer in C is a Long in VBA. -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com "Claudia Dell'Era" wrote in message ... Hi! I wrote the code I pasted at the end of the mail to call a sub from a dll file. Apparently the code looks correct to me but instead of returning the correct value of z it gives me only zeros. Does someone of you see any mistake for example in the use of the call sub? Thank you Here is the code: Declare Sub asum Lib "D:\Dll\arr\koedll.dll" (x As Double, y As Double, z As Double, n As Integer) Sub koelarr() ' ' koelarr Macro ' Macro written 10/3/2003 by Claudia Dell'Era Try to link an array ' ' Dim x() As Double, y() As Double, z() As Double Dim n As Integer, i As Integer Worksheets("Sheet2").Activate n = Cells(2, 4) ReDim x(1 To n) As Double, y(1 To n) As Double, z(1 To n) As Double Worksheets("Sheet2").Activate For i = 1 To n x(i) = Cells(i + 1, 1) Next i For i = 1 To n y(i) = Cells(i + 1, 2) Next i Call asum(x(1), y(1), z(1), n) For i = 1 To n Cells(i + 1, 3) = z(i) Next i End Sub . |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
call sub
Claudia,
I don't know Fortran, so I have no idea whether your Fortran code is correct or not. Is the Fortran function expecting the variables to be passed "by reference" (i.e., pointers) or "by value" (i.e., actual values)? -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com "Claudia Dell'Era" wrote in message ... Hi Chip Thanx for your answer. "asum" is a simple function (x+y=z) I made to check if the "array passing" from the dll to VBA works.The real program I have to use in practice is much bigger but if already doesn't work with this... The dll is written in Visual Fortran. I paste the code since it is short. Thank you ! koedll.f90 ! ! FUNCTIONS/SUBROUTINES exported from koedll.dll: ! koedll - subroutine ! subroutine asum(x, y, z, n) implicit double precision (a-h,o-z) dimension x(n), y(n), z(n) ! Expose subroutine koedll to users of this DLL ! !DEC$ ATTRIBUTES DLLEXPORT::asum !DEC$ ATTRIBUTES ALIAS : "asum" :: asum ! Variables ! Body of koedll do i = 1, n z(i) = y(i) + x(i) end do return end subroutine -----Original Message----- Claudia, Your code looks good to me, and a quick test with a DLL written in C++ bears this out. How is your 'asum' function declared in the DLL? Remember an integer in C is a Long in VBA. -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com "Claudia Dell'Era" wrote in message ... Hi! I wrote the code I pasted at the end of the mail to call a sub from a dll file. Apparently the code looks correct to me but instead of returning the correct value of z it gives me only zeros. Does someone of you see any mistake for example in the use of the call sub? Thank you Here is the code: Declare Sub asum Lib "D:\Dll\arr\koedll.dll" (x As Double, y As Double, z As Double, n As Integer) Sub koelarr() ' ' koelarr Macro ' Macro written 10/3/2003 by Claudia Dell'Era Try to link an array ' ' Dim x() As Double, y() As Double, z() As Double Dim n As Integer, i As Integer Worksheets("Sheet2").Activate n = Cells(2, 4) ReDim x(1 To n) As Double, y(1 To n) As Double, z(1 To n) As Double Worksheets("Sheet2").Activate For i = 1 To n x(i) = Cells(i + 1, 1) Next i For i = 1 To n y(i) = Cells(i + 1, 2) Next i Call asum(x(1), y(1), z(1), n) For i = 1 To n Cells(i + 1, 3) = z(i) Next i End Sub . |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Wouldn't know what to call it! | Excel Worksheet Functions | |||
Is there a do not call function? | Excel Discussion (Misc queries) | |||
I'm not sure what you'd call it, but is it possible to do this? | Excel Discussion (Misc queries) | |||
Call Center Management: How to calculate 'cost per call' | Excel Discussion (Misc queries) | |||
Don't know what to call what I need? | Excel Worksheet Functions |