0

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

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

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

在 vb 端,我对调用进行了编码,但在编译时收到错误:

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

obs。:如果我直接返回该类类型的对象(不使用队列),它就可以工作。问题是在通话中我需要接听其中的几个。

有任何想法吗?

4

1 回答 1

0

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

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

某些类(在这种情况下创建为“值”)

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

一些接收队列作为参数的函数:

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 类型的队列并使用它调用函数

Dim myClassObj as new MyClass
Dim myClassQueue as new Queue(of MyClass)

myClassObj.FunctionName(myClassQueue)
myClassObj =  myClassQueue.Dequeue()

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

此致,

于 2013-03-16T21:11:01.900 回答