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

标签 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É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/

相关文章:

c - 严格混叠警告和tcpdump示例代码

c - 如何求 3 的倍数

c - 使用 getchar() 读取两个字符串

c - 函数中的 printf 重复打印,然后停止并正常工作

C - 在这个简单的程序中出现段错误(核心转储)错误

c - C中的右对齐十进制字符串

你能在 c 中运行初始化函数吗?

c - ARM:没有帧指针的调用堆栈生成

CS50 PSET 2 凯撒错误结果

c - scanf_s() 缓冲区在哪里定义?