1 ضمیمه
خروجی BSTR برای اکتیوایکس گذاشتم اما تو C# خطا میده؟
سلام
من یه برنامه در برلند سی ++ نوشتم از نوع اکتیو ایکس. این برنامه به سوکت وصل میشه و داده می فرسته و میگیره.
همه توابع درست کار می کنند به جز تابعی که داده از جنس رشته را می خواد برگردونه تو خروجی.
این کد سی ++
//============ 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
نقل قول: خروجی BSTR برای اکتیوایکس گذاشتم اما تو C# خطا میده؟
در زمانیکه شما متغیری از جنس 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