我一直在努力解决一个问题,在将其分解为最简单的形式后,我现在意识到我只需要将一个数组转换为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ÉLLOWORLD” - 绝对完美。
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 是char。如何修改代码以将myStr的值从函数中获取到VBA中。
作为背景,我的结束程序只需要3个双打作为输入。代码我已经将这3个双打变成了一个9-60个字符长的字符串,所以最终它将是我需要转换为BSTR的字符串。如果我能够完成上述工作,我有理由相信其余部分是可以实现的。
答案 0 :(得分:0)
我相信你需要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);
}