Я создал библиотеку ActiveX C++. Когда я сделал свой кулак OCX, который подключается к сокете и проверяет соединение, а также читает сокет и записывает в гнездо. Вся функция работает, но функция (Чтение из сокета и отправка строки в контейнер ActiveX) возвращает тип BSTR (string), который не работал. после запуска проекта, когда этот код запускает программу, внезапно закрывается. Как я могу отправить данные, которые я прочитал из сокета в контейнер ActiveX с помощью этой функции?Почему программа C# закрыта, когда я использовал мой метод OCX со строковым возвращаемым типом?
//============ 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.
}
Может быть, ваш выход пустой или поврежден. – MHM
Я так не думаю. –
Это, фактически. 'Read()' не правильно выделяет память для выходного BSTR. Используйте класс ['WideString'] (http://docwiki.embarcadero.com/Libraries/en/System.WideString), чтобы помочь вам:' return WideString (ch, 3) .Detach(); 'в противном случае вам нужно позвонить ['SysAllocStringLen()'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms221639.aspx) напрямую: 'return SysAllocStringLen (ch, 3);' –