ورود

View Full Version : مبتدی: خروجی BSTR برای اکتیوایکس گذاشتم اما تو C# خطا میده؟



haniyeh.ghassami
شنبه 13 شهریور 1395, 12:59 عصر
سلام
من یه برنامه در برلند سی ++ نوشتم از نوع اکتیو ایکس. این برنامه به سوکت وصل میشه و داده می فرسته و میگیره.
همه توابع درست کار می کنند به جز تابعی که داده از جنس رشته را می خواد برگردونه تو خروجی.
این کد سی ++

//============ 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 = axSock41.Read();
int a = axSock41.ConStatus();
label1.Text = Convert.ToString(a);
label1.Text = axSock41.Read();// in this line the program was closed.
}

اینم تصویر خطامه :
142381

haniyeh.ghassami
یک شنبه 14 شهریور 1395, 12:22 عصر
در زمانیکه شما متغیری از جنس BSTR را از طریق کاو دارید انتقال میدید باید مراقب حافظه اشغال شده هم باشید.


BSTR STDMETHODCALLTYPE TSock4Impl::Read()
{
WCHAR ch[10];
ch[0]=L'1';
ch[1]=L'2';
ch[2]=L'3';
return ::SysAllocStringLen(ch, 3);
} Reference: Allocating and Releasing Memory for a BSTR (https://msdn.microsoft.com/en-us/library/xda6xzx7.aspx)