2017-05-27 6 views
-3

C++のdllからデータを読み込む際に問題が発生しました.C++のDLLとUIの作成でデータを処理する必要があります.DListにTListを渡してから、リストにデータを挿入します。それを作る方法は?例が良い、最高の。C++のdllからベクターデータを読み込みますか?

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

@Victoria Wut ?? –

+0

@Victoriaおそらく私のプロフィールをもう一度読んでください。 –

答えて

2

TListのようなDelphi固有の型をC++ DLLに渡すことはできません。そのDLLはC++ Builderで書かれていません。

C++コンパイラは、Delphi固有のタイプのTList(他のクラス、動的配列、文字列、セット、オープン配列など)を処理することはできません。また、DelphiではC++ vectorの型(または他のテンプレートやクラスの型)を扱うことができません。 だから、単にそれをしないでください

DLLが、TListを知っているDelphiコンパイラと同じバージョンのC++ Builderで書かれていても、RTLの2つの異なるインスタンスを扱っているので、まだ問題はあります。適切に動作しない(メモリ管理、RTTIなど)。

C++ Builderパッケージは、次のいずれかの解決策ではありません。Delphiでは、C++ Builderで書かれたBPLは使用できません。 C++ BuilderはDelphiパッケージを使用することができます。

したがって、単純な古いデータ(POD)タイプを渡すだけです。単純型の配列、または単純型の構造体/レコードを渡し、配列をポインタとして(最初の要素へ)渡します。動的配列を渡したり、配列パラメーターをオープンしようとしないでください。これらはDelphi固有のものです。

は、最初の要素へのポインタを渡すだけで、それを埋めるのに十分な空き領域を割り当てている限り、Delphi側で動的配列を使用します。 DLLがメモリを管理したり、配列を再割り当てしようとしないでください。それはできません。余分なパラメータとして、データの最大長を渡します。 DLLは、のみの配列を記入する必要があります。何が価値があるために


、私はDLL dos and don'tsについての記事を書かれています。それを読んで熟考してください。この記事では、私が上に書いたことをもう少し詳しく説明し、言語境界を越えて使用されるDLLを書く方法について少し詳しく説明します。

関連する問題