私はC++でDLLを作成してきましたが、VB6アプリケーションからこのDLLを呼び出す必要があります。
このDLLのコードサンプルは次のとおりです。
#include <vector>
#include <string>
using namespace std;
void __stdcall DLLFunction (vector<Object>*)
{
// performs a few operations on the Objects contained in the vector.
}
struct Object
{
long CoordX;
long CoordY;
long Width;
long Height;
LPSTR Id;
};
また、VB6で「オブジェクト構造体」を定義しました
Private Type Object
CoordX As Integer
CoordY As Integer
Width As Integer
Height As Integer
Id As String
End Type
問題は、DLLの関数を呼び出すためにvb6タイプがstd::vectorを表すことができるかどうかわからないことです。
注:
-オブジェクトを追加できるようにするために、DLLのベクトルを使用します。
-できるだけ少ないメモリを使用するために、ポインタを使用します。
-私の英語は申し訳ありませんが、それは私の母国語ではありません。
-読んで助けてくれてありがとう。
編集:
-タイピングの問題を修正しました(IDは間違いなくNullCharで終了するため、LPSTRでうまくいくはずです)。-私はあなたの答えを読みました、そして私はあなたの両方に感謝したいと思います、あなたの答えは互いに近く、大きな問題が残っています。私のDLLは間違いなくコンテナに要素を追加する必要があります。したがって、私はどうやってそのトリックを行うことができるのだろうかと思っています。たぶん、関数にreturn型を追加して、関数が(コンテナーに直接入れるのではなく)作成したアイテムを返すことができるようにして、vb6アプリケーションがこれらのアイテムを取得して処理できるようにすることもできますが、これを行う方法がわかりません
ビスを編集:
@Rook:新しい構造体を使用することでこれを達成できると思います。
struct ObjectArrayPointer
{
Object * Pointer;
size_tカウンター;
}
そして、このように私の関数を呼び出します:
void __stdcall DLLFunction (ObjectArrayPointer*);
その後、オブジェクトを追加し、VB6アプリケーションのサイズパラメーターを編集して、これらの新しいオブジェクトを見つけることができます。それはあなたが意味したことでしたか?