Jak przekonwertować VARIANT https://msdn.microsoft.com/en-us/library/windows/desktop/dd373687%28v=vs.85%29.aspx na String lub tablicę String?
0
#include <windows.h>
#include <stdio.h>
#include <string>
#include <comutil.h>
#include <comdef.h>
using namespace std;
int main()
{
VARIANT v;
string vr;
VariantInit(&v);
VariantClear(&v);
printf("%s", ((LPCSTR)((_bstr_t)v)));
}
Mam błąd:
undefined reference to `_com_util::ConvertBSTRToString(wchar_t*)@4'
Co dodać?
0
Chyba stał się cud grzebiąc w plikach comutil.h że w przestrzeni nazw _com_util używany jest ConvertBSTRToString i przy nim występuje ten problem
Gdy nie podawałem mu żadnych parametrów problemu nie było szukałem w google jak naprawić ten błąd i nagle trafiłem na tą stronę :) http://www.codeproject.com/Articles/1969/BUG-in-com-util-ConvertStringToBSTR-and-com-util
po wstawieniu tej funkcji kod się skompilował bez problemu i wreszcie mój problem został rozwiązany
#include <windows.h>
#include <stdio.h>
#include <comutil.h>
#include <comdef.h>
#include <string>
using namespace std;
inline char* ConvertBSTRToString(BSTR pSrc) {
if(!pSrc) return NULL;
//convert even embeded NULL
DWORD cb,cwch = ::SysStringLen(pSrc);
char *szOut = NULL;
if(cb = ::WideCharToMultiByte(CP_ACP, 0,
pSrc, cwch + 1, NULL, 0, 0, 0)) {
szOut = new char[cb];
if(szOut) {
szOut[cb - 1] = '\0';
if(!::WideCharToMultiByte(CP_ACP, 0,
pSrc, cwch + 1, szOut, cb, 0, 0)) {
delete []szOut; //clean up if failed;
szOut = NULL;
}
}
}
return szOut;
};
int main(){
VARIANT v;
string vr;
VariantInit(&v);
VariantClear(&v);
ConvertBSTRToString((_bstr_t)v);
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
no such file directory
.