是否有可能将通用队列从c++传递到vb.net?如何去做

Is it possible to pass a Generic queue from c++ to vb.net? How?

本文关键字:vb net 何去做 c++ 有可能 队列 是否      更新时间:2023-10-16

我收到了一个旧的c++代码,处理一些TCP/IP通信,我把它转换成一个CRL类,我可以从vb.net调用。因此,我创建了一个接收Socket IP和其他参数的入口方法。这很好,所有的过程都工作正常。

现在我需要收回收到的信息,并从vb.net应用程序处理它。

这就是我尝试过但没有成功的方法:我在c++端创建了一个类(尝试了一个ref类和一个value类),并在入口方法签名中添加了我的类类型的Collections::Generic Queue。(我的想法是在c++端队列中加入类,并从vb.net端取消队列。

在vb端,我编写了调用,但在编译时,我收到错误:

'my_method_name'具有不支持的返回类型或不支持的参数类型。

奥林匹克广播服务公司。:如果我直接返回该类类型的对象(不使用队列),它可以工作。问题是,在一个电话中,我需要接收几个。

任何想法?

已经找到了我的问题的解决方案,我想分享它,因为可能对其他人有用。我的项目是一个CLR项目(CRL类库)只是一个入口点到几个用C写的函数,我在一个VB.net项目中使用"添加引用"加载的dll。

我的c++部分可以恢复为:

某个类(在本例中创建为'value')

public value class MyClass
{
public:
int val1;
... 
};

接收Queue作为参数的函数:

void FunctionName(System::Collections::Generic::Queue<MyClass>^ MyClassQueue)
{
// create some object of your class
MyClass obj1;
// fill the object
obj1.val1 = 0;
// enqueue the object (you need to use '->')
MyClassQueue->Enqueue(obj1);
};

现在,从VB.net端,如果c++部分是CLR,那么在将引用添加到dll之后,您将看到类型和函数。

因此,您将创建一个MyClass类型的Queue并使用它调用函数

Dim myClassObj as new MyClass
Dim myClassQueue as new Queue(of MyClass)
myClassObj.FunctionName(myClassQueue)
myClassObj =  myClassQueue.Dequeue()

现在您可以按照预期在vb端处理对象了。

问好,