Excel中的错误DLL调用约定

时间:2016-11-22 22:25:31

标签: c++ excel vba

我已尝试过这里发布的技巧(至少是我发现的技巧),但我似乎仍然无法摆脱可怕的“Bad DLL Calling Convention”错误。这是我的(非常简单的)c ++代码:

VRTTCONVERSION_API long controlVTT(BYTE controlVal, BYTE valueVal)
{
    LPSTR controlStr = new char[256];
    PCHAR convstrout = new char[256];

    if (controlVal == 1) {
        controlStr = "Ping";
    }else if (controlVal == 2) {
        controlStr = "0 Init Tool Default";
    }
    if (bGetGeneralAccessFunctionPointer()) {
        return (pGeneral)(controlStr, convstrout, 256);
    }
    else {
        printf("failed to acquire function pointer.\n");
        return -1;
    }
}

这应该接受字节作为输入并返回一个长整数。我知道返回有效,因为我有另一个函数不接受任何输入并返回long并且一个工作正常。

这是VBA代码(再次,简单):

Public Declare PtrSafe Function controlVTT Lib "VRTTConversionDLL.dll" Alias "#4" (ByVal controlVal As Byte, ByVal valueVal As Byte) As Long

Sub testControl()

Dim retval As Long
Dim bFunc As Byte
Dim bVal As Byte

bVal = 0
bFunc = 1

retval = controlVTT(bFunc, bVal)
MsgBox retval
bFunc = 2
retval = controlVTT(bFunc, bVal)
MsgBox retval    
End Sub

我知道#4别名是正确的(使用DLL导出查看器)。当我从另一个C ++函数调用它时,该函数也有效(见下文):

int main()
{
    long retVal;
    retVal = controlVTT(1, 0);
    printf("Return: %08X \n", retVal);
    retVal = controlVTT(2, 0);
    printf("Return: %08X \n", retVal);
    return 0;   return 0;
}

显然,我不是一名专业的程序员,我可能会遗漏一些基本的东西,但我真的被卡住了。

0 个答案:

没有答案