почему программа C # закрыта, когда я использовал свой метод OCX со строковым типом возврата?

Я сделал c ++ конструктор ActiveX Library.
Когда я сделал свой кулак OCX, которые подключаются к сокету и проверяют соединение, а также читают из сокета и пишут в сокет. Вся функция работает, но функция возврата (чтение из сокета и отправка строки в контейнер ActiveX) — BSTR (строка) не работает.
после запуска проекта при запуске этого кода программа неожиданно закрывается.
Как я могу отправить данные, которые я прочитал из сокета, в контейнер ActiveX с помощью этой функции?

 //============ c++ builder xe8================
//I change the code to just return simple output"123"//but it can not retun and c# program closed
BSTR STDMETHODCALLTYPE TSock4Impl::Read()
{
WCHAR ch[10];
ch[0]='1';
ch[1]='2';
ch[2]='3';
return ch;
}
//=============c# code ================
private void Form1_Load(object sender, EventArgs e)
{
//label1.Text = axVinaSock41.Read();
int a = axSock41.ConStatus();
label1.Text = Convert.ToString(a);
label1.Text = axVinaSock41.Read();// in this line the program was closed.
}

введите описание изображения здесь

3

Решение

Моя проблема решена. При создании BSTR и передаче его между COM-объектами необходимо позаботиться об используемой памяти.

BSTR STDMETHODCALLTYPE TSock4Impl::Read()
{
WCHAR ch[10];
ch[0]=L'1';
ch[1]=L'2';
ch[2]=L'3';
return ::SysAllocStringLen(ch, 3);
}

Ссылка: Выделение и освобождение памяти для BSTR

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector