我已经解决一个问题有一段时间了,在将其分解为最简单的形式后,我现在意识到我只需要将数组转换为 BSTR 并使该 BSTR 在 VBA 中可用。因此,这是我需要修复的完整示例代码。
STDAPI GetMyCode(BSTR in, BSTR out, int cch, double *int1, double *int2, double *int3)
{
LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LINGUISTIC_CASING | LCMAP_UPPERCASE, in, SysStringLen(in), out, cch);
char myStr[60];
strcpy_s(myStr, 60, out);
return S_OK;
当我将其转换为 DLL 并使用以下 VBA 调用它时,结果是“HÉLLO WORLD” - 绝对完美。
GetMyCode StrPtr("héllo world"), StrPtr(cch), 256, -32.12345, 115.11111, 23.5
debug.print cch
虽然它可以工作,但部分代码无法正确编译,即 strcpy_s(myStr, 60, out); 因为 out 是 BSTR 并且 myStr 是字符。如何修改代码以将 myStr 的值从函数中获取到 VBA 中。
作为背景,我的最终程序只需要 3 个 double 作为输入。我已经将这 3 个 double 转换为 9-60 个字符长的字符串,因此最终我需要将该字符串转换为 BSTR。如果我能做到以上几点,我就有理由相信其余的事情都是可以实现的。
最佳答案
我相信你需要ConvertStringToBSTR
// ConvertStringToBSTR.cpp
#include <comutil.h>
#include <stdio.h>
#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib, "kernel32.lib")
int main() {
char* lpszText = "Test";
printf_s("char * text: %s\n", lpszText);
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
wprintf_s(L"BSTR text: %s\n", bstrText);
SysFreeString(bstrText);
}
关于c - 修改此代码以将 mySTR 转换为 BSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46108574/