5 votes

Où se trouve comsupp(w).lib ?

J'essaie de compiler un code COM, l'exemple suivant aquí . J'obtiens la compilation sans problème, mais la liaison se plaint de l'absence de ConvertStringtoBSTR. Après avoir fait quelques recherches, j'ai découvert que ce symbole devrait se trouver dans comsupp.lib. Le problème est que je ne trouve pas cette bibliothèque dans le SDK de Windows... où se trouve la bibliothèque ou la fonction ?

6voto

user3454439 Points 479

Il suffit de copier le commentaire de @HansPassant pour que le commentaire devienne une réponse. Je n'essaye pas de lui voler sa réponse, mais je veux juste que les gens sachent qu'il y a un problème. conozca il y a une réponse à cette question.

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

1voto

Denis LALANNE Points 11

Sept ans plus tard, en cas de recherche sur Google... Si vous n'avez pas VS, vous pouvez simplement copier et utiliser le code de la source WineHQ pour cette fonction, quelque chose comme ça :

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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X