Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我使用带有字符串返回类型的OCX方法时,为什么C#程序是关闭的? 我制作了一个C++ Builder ActiveX库。 当我制作我的第一个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. }_C#_C++_Sockets_Activex_C++builder Xe - Fatal编程技术网

当我使用带有字符串返回类型的OCX方法时,为什么C#程序是关闭的? 我制作了一个C++ Builder ActiveX库。 当我制作我的第一个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. }

当我使用带有字符串返回类型的OCX方法时,为什么C#程序是关闭的? 我制作了一个C++ Builder ActiveX库。 当我制作我的第一个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. },c#,c++,sockets,activex,c++builder-xe,C#,C++,Sockets,Activex,C++builder Xe,我的问题解决了。当创建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); } 参考资料:可能您的输出为空或已损坏。我不这么认为。事实上是这样Read()没有为输出BSTR正确分配内存。使用该

我的问题解决了。当创建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);
}  

参考资料:

可能您的输出为空或已损坏。我不这么认为。事实上是这样
Read()
没有为输出BSTR正确分配内存。使用该类帮助您:
返回宽字符串(ch,3).Detach()
否则您必须直接调用:
返回SysAllocStringLen(ch,3)
C++Builder有一个
WideString
类为您包装BSTR内存管理。@RemyLebeau。真的谢谢。