VBA/Excel/Refprop(第一次工作,不是第二次)

VBA/Excel/Refprop(第一次工作,不是第二次),excel,vba,Excel,Vba,我正在尝试制作可以使用RefProp的DLL和计算的Excel函数,但收效甚微。我的代码如下: Public Function enthalpy(t, p) Dim hRef As Double: Dim sRef As Double: Dim Tref As Double: Dim pref As Double Dim nc2 As Long Dim i As Integer Dim xtemp(1 To MaxComps) As Double hmxnme = "C:\Program

我正在尝试制作可以使用RefProp的DLL和计算的Excel函数,但收效甚微。我的代码如下:

Public Function enthalpy(t, p)

Dim hRef As Double: Dim sRef As Double: Dim Tref As Double: Dim pref As Double

Dim nc2 As Long
Dim i As Integer
Dim xtemp(1 To MaxComps) As Double

hmxnme = "C:\Program Files (x86)\REFPROP\Mixtures\R404A.MIX"
hfmix = "C:\Program Files (x86)\REFPROP\fluids\hmx.bnc"

nc2 = 0
ierr = 0
herr = ""
For i = 1 To MaxComps: xtemp(i) = 0: Next

hRef = 0: sRef = 0: Tref = 0: pref = 0

Call SETMIXdll(hmxnme, hfmix, hrf, nc2, hfld, xtemp(1), ierr, herr, 255&, 255&, 3&, 10000&, 255&)
Call SETREFdll(hrf, 2&, x(1), hRef, sRef, Tref, pref, ierr2, herr2, 3&, 255&)

'Zero variables apart from T and P
q = 0: d = 0: Dl = 0: Dv = 0: e = 0: h = 0: s = 0: Cvcalc = 0: Cpcalc = 0: w = 0

nc = 3
For i = 1 To nc
    xliq(i) = 0: xvap(i) = 0
Next

For i = 1 To 3: x(i) = xtemp(i): Next

Call TPFLSHdll(t, p, x(1), d, Dl, Dv, xliq(1), xvap(1), q, e, h, s, Cvcalc, Cpcalc, w, ierr, herr, 255&)
enthalpy = h / 97.6037985507645

End Function
它在第一次调用时起作用,但在其他任何时候都不起作用。当然,除非我点击vba中的重置按钮,然后使用公式为焓(2781500)的单元格再次调用代码。我已经打印了发送到DLL的参数,它们每次都是相同的

从TPFLSHdll调用中,所有返回值(包括q)始终相同,无论我调用函数多少次都没有重置。第一次调用函数时,e到w的值是正确的,第二次、第三次、第四次等等都是错误的,但它们保持不变

我有其他使用类似代码但不同DLL的函数,它们工作得很好。如果用所有相同的参数调用一个进程,我不太明白如何从该进程返回一个不同的值,除非它链接到另一个值,该值仅在第一次运行时更改,然后保持不变,随后抛出计算。这个神秘的值通过重置被“清除”,因此我的功能再次工作

很明显,我希望它能正常工作,因为没有必要尝试将某些东西自动循环数千次,而每次只需手动按下一个重置按钮,第二,我觉得我犯了一个巨大的基本的、明显的错误,我真的应该发现这个错误


我意识到我在询问一个niché程序,但我知道错误一定在我键入的一行代码中,因此非常感谢任何帮助

数组“X”在哪里定义?我看不到,但你引用了它。对于其他未定义的变量(即“d”…)@WayneG.Dunn函数中未定义的任何内容都在常规声明中。似乎每次运行代码时都需要实际停止库的执行并重新创建对象。@OilDrumAlley您可以尝试手动重置函数末尾除h以外的所有变量。然而,另一件事可能是DLL内存管理问题。