1つのdll関数から複数の文字列を返す良い方法は何ですか?現在8つの文字列がありますが、さらに多くの文字列があります。簡単にするために、私は今すべての文字列が等しい長さを持つと考えます。複数の文字列をdllから返す
extern "C" int DLLNAME_ _stdcall GetResult(TestResults* testResults);
ここ
struct TestResults
{
int stringLengths;
char* string1;
char* string2;
char* string3;
char* string4;
...
};
又は第二のオプション:
struct TestResults
{
int stringLengths;
char string1[64];
char string2[64];
char string3[64];
char string4[64];
...
};
第三のオプション: のextern "C" INT DLLNAME_ _stdcallのgetResult(stringLengths INT、チャー*の文字列1、チャー*文字列2 、char * string3、...);
dllはシリアル回線を介して通信し、文字列に入力される情報を取得します。メモリを割り当てる必要がある場所は議論の場であり、答えの一部とすることができます。
バックグラウンドでは、2番目の方法を好むVB6アプリケーションチームと、1番目の方法を好むC++/C#チームがあるということです。最後の方法は両方のチームに合っているように見えますが、非常に多くのパラメータで私には少し奇妙に見えます。
多分もっと多くのオプションがあります。 Windowsではよくあることは何ですか? Windows APIの引数や引数を選択する引数はどれですか?
編集:文字列は、名前、姓、メールのような意味を持ちます。現在は8つありますが、将来は住所などのカップルを追加する可能性があります。配列は正しい選択ではありませんが、元のコンテキストからは明らかではありませんでした。
「char *」を使用すると、どのようにメモリの割り当て/割り当て解除が管理されますか?また、言語間型(定義されたメモリ管理を持つ)としての 'BSTR'を参照してください。 –
あなたのコメントに答えるために質問が更新されました。私たちは配分がどこに起こる必要があるかを言う厳しいルールはありません。これはおそらく、良い/共通のアイデアが何であるかわからなくなる理由の一部です。 –
VB 6と相互運用する場合は、絶対に* BSTRを使用する必要があります。これは、VB 6が文字列型として使用するものです。標準のCOMタイプなので、.NETアプリケーションからもうまく動作します。 –