comsupp(w).lib在哪里?

时间:2012-02-25 14:07:26

标签: c++ windows visual-c++ com mingw32

我正在尝试编译一些COM代码,例如here。我得到编译正常,但链接有关ConvertStringtoBSTR丢失的投诉。在做了一些研究后,我发现所述符号应该在comsupp.lib中。问题是我在Windows SDK中找不到这个库...库或函数在哪里?

2 个答案:

答案 0 :(得分:5)

只需复制@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

答案 1 :(得分: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;
}