0

TCP /IP通信を処理する古いc++コードを受け取り、vb.netから呼び出すことができるCRLクラスに変換しました。そこで、SocketIPやその他のパラメータを受け取る入力メソッドを作成しました。これは正常に機能し、すべてのプロセスは正常に機能しています。

次に、受け取った情報を取り戻し、vb.netアプリケーションから処理する必要があります。

それは私が成功せずに試したことです。C++側でクラスを作成し(refクラスとvalueクラスの両方を試しました)、クラスタイプのCollections ::GenericQueueをエントリメソッドのシグネチャに追加しました。(私の考えは、クラスを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 に答える