не могу вытащить string из управляемого кода
От:
sect0id
Дата: 28.01.11 08:00
Оценка:
Здравствуйте! столкнулся с проблемой вытаскивания строки из c# в с++...
есть код на c#
namespace MyInterop
{
public interface IMyDotNetInterface2
{
int Add(int Number1, int Number2);
[return: MarshalAs(UnmanagedType.BStr)] string say();
public class MyDotNetClass : IMyDotNetInterface2
{
public string say()
{
return "OK";
}
public int Add(int Number1,int Number2)
{
return Number1+Number2;
}
}
}
}
не могу вытащить "OK" из функции say();
пробовал так:
Код C++
myfunc(){
CoInitialize(NULL);
MyInterop::IMyDotNetInterface2Ptr pDotNetCOMPtr2(__uuidof(MyDotNetClass));
long lResult = 0;
pDotNetCOMPtr2->Add(5,10, &lResult);
myfile<<"\nCOM5="<<lResult; //тут всё ок
BSTR test_lResult = SysAllocString(L"");
pDotNetCOMPtr2->say(&test_lResult);
myfile<<"\nCOM6="<<test_lResult; //тут выводит "00070F84"
}
подскажите пожалуйста как вытащить string? буду очень благодарен, спасибо.
Re: не могу вытащить string из управляемого кода
Здравствуйте, sect0id, Вы писали:
S> BSTR test_lResult = SysAllocString(L"" );
S> pDotNetCOMPtr2->say(&test_lResult);
S> myfile<<"\nCOM6=" <<test_lResult; //тут выводит "00070F84"
S>подскажите пожалуйста как вытащить string? буду очень благодарен, спасибо.
Для начала добиться, чтобы поток myfile, в который производится запись юникодной строки test_lResult, был юникодным и корректно записывал юникодные строки.
Re: не могу вытащить string из управляемого кода
//managed c++ class
public ref class Something
public :
void manageString(String^ string) {
pin_ptr<const wchar_t > str = PtrToStringChars(string);
pure_cpp_class->manageString((const wchar_t *)str);
}
private :
PureCPPClass *pure_cpp_class;
};
вызывается из c# со стандартным типом строк.
Здравствуйте, sect0id, Вы писали:
S>Здравствуйте! столкнулся с проблемой вытаскивания строки из c# в с++...
S>есть код на c#
S>namespace MyInterop
S>{
S> public interface IMyDotNetInterface2
S> {
S> int Add(int Number1, int Number2);
S> [return: MarshalAs(UnmanagedType.BStr)] string say();
S> public class MyDotNetClass : IMyDotNetInterface2
S> {
S> public string say()
S> {
S> return "OK";
S> }
S> public int Add(int Number1,int Number2)
S> {
S> return Number1+Number2;
S> }
S> }
S> }
S>}
S>не могу вытащить "OK" из функции say();
S>пробовал так:
S>Код C++
S>myfunc(){
S> CoInitialize(NULL);
S> MyInterop::IMyDotNetInterface2Ptr pDotNetCOMPtr2(__uuidof(MyDotNetClass));
S> long lResult = 0;
S> pDotNetCOMPtr2->Add(5,10, &lResult);
S> myfile<<"\nCOM5="<<lResult; //тут всё ок
S> BSTR test_lResult = SysAllocString(L"");
S> pDotNetCOMPtr2->say(&test_lResult);
S> myfile<<"\nCOM6="<<test_lResult; //тут выводит "00070F84"
S>}
S>подскажите пожалуйста как вытащить string? буду очень благодарен, спасибо.
Re: не могу вытащить string из управляемого кода
От:
Вертер
Дата: 29.01.11 16:22
Оценка:
S> BSTR test_lResult = SysAllocString(L"");
S> pDotNetCOMPtr2->say(&test_lResult);
S> myfile<<"\nCOM6="<<test_lResult; //тут выводит "00070F84"
хм, а преобразовывать тут ничего не надо?
кусок моей функции:
void myFunc(System::String^ strParams)
{
using namespace msclr::interop;
marshal_context^ context = gcnew marshal_context();
const wchar_t * szString = context->marshal_as<const wchar_t *>(strParams);
...
// szString
...
delete context;
}
Re: не могу вытащить string из управляемого кода
От:
sect0id
Дата: 31.01.11 07:12
Оценка:
Здравствуйте, sect0id, Вы писали:
Спасибо за ответы господа, буду пробовать!
S>Здравствуйте! столкнулся с проблемой вытаскивания строки из c# в с++...
S>есть код на c#
S>namespace MyInterop
S>{
S> public interface IMyDotNetInterface2
S> {
S> int Add(int Number1, int Number2);
S> [return: MarshalAs(UnmanagedType.BStr)] string say();
S> public class MyDotNetClass : IMyDotNetInterface2
S> {
S> public string say()
S> {
S> return "OK";
S> }
S> public int Add(int Number1,int Number2)
S> {
S> return Number1+Number2;
S> }
S> }
S> }
S>}
S>не могу вытащить "OK" из функции say();
S>пробовал так:
S>Код C++
S>myfunc(){
S> CoInitialize(NULL);
S> MyInterop::IMyDotNetInterface2Ptr pDotNetCOMPtr2(__uuidof(MyDotNetClass));
S> long lResult = 0;
S> pDotNetCOMPtr2->Add(5,10, &lResult);
S> myfile<<"\nCOM5="<<lResult; //тут всё ок
S> BSTR test_lResult = SysAllocString(L"");
S> pDotNetCOMPtr2->say(&test_lResult);
S> myfile<<"\nCOM6="<<test_lResult; //тут выводит "00070F84"
S>}
S>подскажите пожалуйста как вытащить string? буду очень благодарен, спасибо.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить