如何从vba中的DLL(Excel Visual Basic)接收多返回值



我目前正在尝试从DLL接收多个返回值。

这是我的DLL代码。

double _stdcall pll_dll(double* datain0, double* datain1, double* dataout0, double* dataout1)
{
    dataout0[0] = datain0[0]+10;
    dataout1[0] = datain1[0]+10;
    return 0;
}

然后,我想通过使用datain0datain1为DLL提供一些价值,并从DLL接收dataout0dataout1

这是我的VBA代码。实际上,我不熟悉Excel VBA。

Option Explicit
Private Declare PtrSafe Function pll_dll Lib "F:workpll_dllx64Debugpll_dll.dll" (ByRef x_in As Double, ByRef y_in As Double, ByRef x_out As Double, ByRef y_out As Double) As Double
Dim Error As Integer
Dim dat0 As Double
Dim dat1 As Double
Dim dat2 As Double
Dim dat3 As Double
  
Function pll_dll_excel(data0 As Double, data1 As Double, data2 As Double, data3 As Double) As Double
    pll_dll_excel = pll_dll(data0, data1, data2, data3)
End Function
Sub useSquareInVBA()
    MsgBox pll_dll_excel(3, 4, Cells(5, 5), Cells(6, 6))
End Sub

我必须如何制作功能,这就是我要给出datain0=3datain1=4并接收dataout0dataout1值的功能?

编辑。

我有一些线索。而且我已经更新了我的代码。

Option Explicit
Private Declare PtrSafe Function pll_dll Lib "F:workpll_dllx64Debugpll_dll.dll" (ByRef x_in As Double, ByRef y_in As Double, ByRef x_out As Double, ByRef y_out As Double) As Double
Dim Error As Integer
Dim dat0 As Double
Dim dat1 As Double
Dim dat2 As Double
Dim dat3 As Double
Dim d1 As Double
Dim d2 As Double

Function pll_dll_excel(data2 As Double, data3 As Double) As Double
    pll_dll_excel = pll_dll(3, 4, data2, data3)
    Cells(5, 5).Value = d1
    Cells(6, 6).Value = d2
End Function
Sub useSquareInVBA() ' Here is the start 
    MsgBox pll_dll_excel(d1, d2)
End Sub

从DLL接收结果值这是正确的吗?

edit2

Function pll_dll_excel(data1 As Double, data2 As Double, data3 As Double, data4 As Double) As Double
    pll_dll_excel = pll_dll(data1, data2, data3, data4)
    
End Function
Sub useSquareInVBA()
    MsgBox pll_dll_excel(3, 4, d1, d2)
    Cells(5, 5).Value = d1
    Cells(6, 6).Value = d2
End Sub

这是正确的吗?

dim d1 as double, d2 as double
pll_dll 3, 4, d1, d2
cells(5,5).value = d1
cells(6,6).value = d2

您已经正确 Declare d接受了四个Double S ByRef的函数。现在您将四个数字传递给它。它将结果将结果放入d1d2

最新更新