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 ?
Réponses
Trop de publicités?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
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;
}