我有一个测试 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
有一个调用该函数的子程序。它读取值为“abcde”的 Excel 单元格,并能够显示正确的结果。子代码是:
sub testCode()
test (cells(1,1).value)
end sub
但是当使用excel公式调用dll函数时=test(A1)
,消息框仅显示字符串的第一个字符“a”。
我花了整个周末阅读 BSTR 等,仍然无法解决这个问题。这里发生了什么?
将导入的函数声明为私有:
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
因为显然,虽然 VB(A) 在调用时使用当前系统代码页将字符串参数转换为 ASCIIDeclare
d API,Excel 引擎没有。
顺便说一句,您可能还想删除括号 https://stackoverflow.com/a/8070104/11683.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)