修改此代码以将mySTR转换为BSTR

时间:2017-09-08 04:18:20

标签: c

我一直在努力解决一个问题,在将其分解为最简单的形式后,我现在意识到我只需要将一个数组转换为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的字符串。如果我能够完成上述工作,我有理由相信其余部分是可以实现的。

1 个答案:

答案 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);  
}