![]() |
how to convert 'System::String ^' to 'BSTR'
i am creating a addin for outlook express in vc++2005
I am trying to load xml to my code with the following code STDMETHOD(GetCustomUI)(BSTR RibbonID, BSTR * RibbonXml) { Assembly^ assem=Assembly::GetExecutingAssembly(); Stream^ strm= assem-GetManifestResourceStream("test.Xmlres.test.xml") ; StreamReader^ reader= gcnew StreamReader(strm); *RibbonXml= reader-ReadToEnd(); reader-Close(); strm-Close(); return S_OK; } but it showing an error in compile time: error C2440: '=' : cannot convert from 'System::String ^' to 'BSTR' No user-defined-conversion operator available, or Cannot convert a managed type to an unmanaged type |
how to convert 'System::String ^' to 'BSTR'
I'm not very familiar with managed C++. I think you can first convert the
System::String to an wide char,an then convert this wide char to BSTR. From MSDN you can get the first step as follows: // convert_string_to_wchar.cpp // compile with: /clr #include stdio.h #include stdlib.h #include vcclr.h using namespace System; int main() { String ^str = "Hello"; // Pin memory so GC can't move it while native function is called pin_ptrconst wchar_t wch = PtrToStringChars(str); printf_s("%S\n", wch); // Conversion to char* : // Can just convert wchar_t* to char* using one of the // conversion functions such as: // WideCharToMultiByte() // wcstombs_s() // ... etc size_t convertedChars = 0; size_t sizeInBytes = ((str-Length + 1) * 2); errno_t err = 0; char *ch = (char *)malloc(sizeInBytes); err = wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes); if (err != 0) printf_s("wcstombs_s failed!\n"); printf_s("%s\n", ch); }And in second step using ::SysAllocString to conver the wchar to BSTR or using _bstr_t. "lencastro" roups.com... i am creating a addin for outlook express in vc++2005 I am trying to load xml to my code with the following code STDMETHOD(GetCustomUI)(BSTR RibbonID, BSTR * RibbonXml) { Assembly^ assem=Assembly::GetExecutingAssembly(); Stream^ strm= assem-GetManifestResourceStream("test.Xmlres.test.xml") ; StreamReader^ reader= gcnew StreamReader(strm); *RibbonXml= reader-ReadToEnd(); reader-Close(); strm-Close(); return S_OK; } but it showing an error in compile time: error C2440: '=' : cannot convert from 'System::String ^' to 'BSTR' No user-defined-conversion operator available, or Cannot convert a managed type to an unmanaged type |
All times are GMT +1. The time now is 12:31 PM. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com