Excel中错误的DLL调用约定

我已经尝试了这里张贴的技巧(至less是我发现的),但是我仍然无法摆脱可怕的“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; } } 

这应该接受字节作为input,并返回一个长。 我知道返回工作,因为我有另一个function,不接受任何投入,并返回长期和一个正常工作。

这里是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; } 

显然,我不是一个专业的程序员,我可能错过了一些基本的东西,但是我真的被困住了。