我创建了一个包含名为“koduj”的函数的 DLL。通过在 Excel 工作表单元格中使用此函数来调用它会返回所需的结果。从 VBA 调用“koduj”返回错误答案。
koduj 需要两个参数:string nr_id
和integer x1
. 它以 ASCII 表示形式计算nr_id
' 字母的总和并添加x1
. 计算的总和比返回。
我按照此处找到的说明进行操作。
这是我的 .cpp 源文件:
#include<Windows.h>
#include<string>
using namespace std;
//Convert BSTR to wstring for convenience
wstring BSTR_to_wstring (BSTR text){
return wstring(text, SysStringLen(text));
}
//Calculate sum of letters in ASCII representation
int ASCII_sum (wstring ws){
int sum = 0;
for (unsigned int i = 0; i < ws.length(); i++)
sum += ws[i];
return sum;
}
//"koduj" function
int _stdcall koduj (BSTR nr_id, int & x1){
wstring ws_nr_id = BSTR_to_wstring(nr_id);
return ASCII_sum(ws_nr_id) + x1;
}
这是我的 VBA 函数声明:
Declare Function koduj _
Lib "<dll_directory_and_full_name>" (ByVal x As String, ByRef y As Integer) As Integer
通过写作:
=koduj("aaa";1)
在工作表单元格内,我得到了想要的结果 (292)
调试此 VBA 代码:
Sub test()
Dim a As Integer
a = koduj("aaa", 1)
End Sub
显示错误结果 (a = 24930)
我相信我的 C++ 代码很好,因为它在从 Excel 的工作表中调用时可以正常工作。