我正在尝试编译一些 COM 代码,这里的示例。我得到了很好的编译,但链接了关于 ConvertStringtoBSTR 丢失的投诉。经过一番研究,我发现所说的符号应该在 comsupp.lib 中。问题是我在 Windows SDK 中找不到这个库......库或函数在哪里?
问问题
7697 次
2 回答
6
只需从@HansPassant 复制评论,以便使评论成为答案。不是想偷他的答案,只是想让人们知道这个问题有答案。
It is not an SDK file, it is a Visual Studio file. Stored in the vc/lib directory. VS license required. – Hans Passant Feb 25 '12 at 19:09
于 2014-08-26T03:49:28.017 回答
1
七年后在谷歌搜索的情况下......如果你没有VS,你可以复制并使用这个函数的WineHQ源代码,就像这样:
char* WINAPI ConvertBSTRToString(BSTR pSrc)
{
DWORD cb, cwch;
char *szOut = NULL;
if (!pSrc) return NULL;
/* Retrieve the size of the BSTR with the NULL terminator */
cwch = ::SysStringLen(pSrc) + 1;
/* Compute the needed size with the NULL terminator */
cb = ::WideCharToMultiByte(CP_ACP, 0, pSrc, cwch, NULL, 0, NULL, NULL);
if (cb == 0)
{
cwch = ::GetLastError();
::_com_issue_error(!IS_ERROR(cwch) ? HRESULT_FROM_WIN32(cwch) : cwch);
return NULL;
}
/* Allocate the string */
szOut = (char*)::operator new(cb * sizeof(char));
if (!szOut)
{
::_com_issue_error(HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY));
return NULL;
}
/* Convert the string and NULL-terminate */
szOut[cb - 1] = '\0';
if (::WideCharToMultiByte(CP_ACP, 0, pSrc, cwch, szOut, cb, NULL, NULL) == 0)
{
/* We failed, clean everything up */
cwch = ::GetLastError();
::operator delete(szOut);
szOut = NULL;
::_com_issue_error(!IS_ERROR(cwch) ? HRESULT_FROM_WIN32(cwch) : cwch);
}
return szOut;
}
于 2021-07-27T15:14:16.640 回答