c# - 为什么当我使用带有字符串返回类型的 OCX 方法时 C# 程序关闭?

标签 c# c++ sockets activex c++builder-xe

<分区>

我制作了一个 C++ 生成器 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.
 }  

enter image description here

最佳答案

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

引用:Allocating and Releasing Memory for a BSTR

关于c# - 为什么当我使用带有字符串返回类型的 OCX 方法时 C# 程序关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304113/

相关文章:

c# - Unity3d MYSQL大对象上传

c++ - 我如何在 Windows 环境中使用 Xerces?

c++ - 如何以正确的方式读/写 UNIX 套接字?

c - 在linux中的同一个套接字上接收来自不同组的多播数据

java - Java中的socket连接什么时候关闭

c# - 从 C# 中的 List<T> 中选择 N 个随机元素

c# - 如何在鼠标悬停在任何单元格上时突出显示 datagridview 的行和/或列标签(在 c# 中)?

c# - 返回抽象返回类型的子类?

c++ - 为什么我们不能重复使用具有不同模板参数的别名模板标识符?

c++ - getline() 函数将标题捆绑在一起