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

C 修改此代码以将mySTR转换为BSTR,c,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_UPPE

我一直在努力解决一个问题有一段时间了,在将其分解为最简单的形式后,我现在意识到我只需要将一个数组转换为一个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是char。如何修改代码以将myStr的值从函数中提取到VBA中

作为背景,我的终端程序只需要3个双倍输入。我的代码已经将这3个双精度转换成了一个9-60个字符长的字符串,因此最终我需要将该字符串转换为BSTR。如果我能实现上述目标,我有理由相信其余的目标都是可以实现的

我相信你需要

//ConvertStringToBSTR.cpp
#包括
#包括
#pragma注释(lib,“comsuppw.lib”)
#pragma注释(lib,“kernel32.lib”)
int main(){
char*lpszText=“测试”;
printf_s(“字符*文本:%s\n”,lpszText);
BSTR bstrText=_com_util::ConvertStringToBSTR(lpszText);
wprintf_s(L“BSTR文本:%s\n”,bstrText);
SysFreeString(bstrText);
}  

不清楚您是否正在尝试将BSTR转换为char*,反之亦然。@GarrGodfrey我需要将myString(即char)转换为BSTR,并将其提供给VBA。Garr Godfrey(很抱歉,无法使@保持不变)谢谢,但这导致comutil.h出现大量错误,以标识符“class”开头的错误未定义。请记住,我对C几乎一无所知
// 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);  
}