gpt4 book ai didi

c++ - VBA 调用相同的 C++ dll 返回不同的结果

转载 作者:太空狗 更新时间:2023-10-29 21:21:33 24 4
gpt4 key购买 nike

我有一个读取字符串并显示它的测试 dll 函数:

int _stdcall test(LPSTR myString) {
MessageBoxA(NULL, (LPCSTR)myString, "test", MB_OK);
return 0;}

excel VBA声明是

Declare Function test Lib "test.dll" (ByVal text As String) As Long

有一个调用函数的sub。它读取值为“abcde”的 excel 单元格,并能够显示正确的结果。子代码是:

sub testCode()
test (cells(1,1).value)
end sub

但是当使用excel公式=test(A1)调用dll函数时,消息框只显示字符串的第一个字符“a”。

我花了整个周末阅读 BSTR 等,仍然无法解决这个问题。这里发生了什么?

最佳答案

将您导入的函数声明为私有(private):

Private Declare Function test_internal Lib "test.dll" Alias "test" (ByVal text As String) As Long

并创建一个包装函数供 Excel 使用:

Public Function Test (ByVal text As String) As Long
Test = test_internal(text)
End Functin

因为显然,当调用 Declared API 时,VB(A) 使用当前系统代码页将字符串参数转换为 ASCII,而 Excel 引擎不会。

附带说明,您可能还想 remove parentheses .

关于c++ - VBA 调用相同的 C++ dll 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22292531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com