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_ptr<const 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" <lencastro[ at ]gmail.com> ??????:1169297004.487965.162140[ at ]11g2000cwr.googlegroups.com...
[Quoted Text] >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 >
|