喫茶XRAYトップページ

[スレッド全体
]

[12904] 整数型配列の引数-DLL返信 削除
2019/6/7 (金) 18:52:25 Mr.XRAY
[ 複数の結果を取得するDLLの使用方法 ]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201906/19060002.txt

> 以下のようにポインターで引数を受け渡したところ無事動作しました。
> ありがとうございました。


えっ !?
本人がそう言うのですから.しょうがないですが.

興味があれば...
http://mrxray.on.coocan.jp/Delphi/zip/QandA_20190603_DLL_Intarray.zip


動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.
DLL 内のの関数を使用するテスト用のコード

implementation

{$R *.dfm}

function test_conv(src:array of integer;
                   var dst1:array of single;
                   var dst2:array of single):boolean;stdcall;external 'dll_testarray.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  ret      : boolean;
  src_dat  : array[0..1000]of Integer;
  dst1_dat : array[0..500]of Single;
  dst2_dat : array[0..500]of Single;
  LIndex   : Integer;
begin
  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;

  for LIndex := 0 to 1000 do src_dat[LIndex]:=1000 + LIndex;
  ret:=test_conv(src_dat,dst1_dat,dst2_dat);

  Memo1.Lines.Add(BoolToStr(ret));
  for Lindex := Low(dst1_dat) to High(dst1_dat) do begin
    Memo1.Lines.Add(FloatToStr(dst1_dat[LIndex]) + '    '
                  + FloatToStr(dst2_dat[LIndex]));
  end;

  Memo1.Lines.EndUpdate;
end;

DLL のコード

library dll_testarray;

uses
  System.SysUtils,
  System.Classes;

function test_conv(src:array of integer;
                   var dst1:array of single;
                   var dst2:array of single):boolean; stdcall;
var
  Lindex : Integer;
begin
  Result := True;

  for Lindex := Low(dst1) to High(dst1) do begin
    dst1[Lindex] := src[Lindex];
    dst2[Lindex] := src[Lindex] * 2;
  end;
end;

exports
  test_conv;
end.




[12905] Re:整数型配列の引数-DLL返信 削除
2019/6/7 (金) 21:43:40 福士
> えっ !?
> 本人がそう言うのですから.しょうがないですが.

これ、他の人がC言語ベースで作ったDLLをDelphiから呼ぶ、という話だったのでは?

int test_conv(
  int   src[1000],
  float dst1[500],
  float dst2[500]
);

int test_conv(
  int   *src,
  float *dst1,
  float *dst2
);
と同義ですから、これで解決というのは当たり前と言えば当たり前で…

[12906] Re2:整数型配列の引数-DLL返信 削除
2019/6/7 (金) 22:52:16 Mr.XRAY
▼ 福士さん.どうもです.

> > 本人がそう言うのですから.しょうがないですが.
> これ、他の人がC言語ベースで作ったDLLをDelphiから呼ぶ、という話だったのでは?


なるほど,そういうことですか.納得です.
読みが浅かったようです.

「行間を読む」と言う言葉がありますが,
「読む」というのは中々難しいです.勉強になりました.


[12907] Re3:整数型配列の引数-DLL返信 削除
2019/6/7 (金) 22:56:40 Mr.XRAY
> 「行間を読む」と言う言葉がありますが,
> 「読む」というのは中々難しいです.勉強になりました.


というか,最初の

int test_conv(
  int   src[1000],
  float dst1[500],
  float dst2[500]
);
の書き方で気づくべきでししたね.


[12911] Re4:整数型配列の引数-DLL返信 削除
2019/6/9 (日) 19:49:08 Mr.XRAY
> の書き方で気づくべきでししたね.

記事にしました.
これをネタにして,また何か変な記事を書くんしゃないか,と思っていた方,
期待に応えてスミマセン (笑)

[ Windows API ( C, C++ ) の関数の配列の引数はポインタ型 ]
http://mrxray.on.coocan.jp/Delphi/Others/TypeArray.htm#12

ページの構成変更に伴い以下に移動しました.
http://mrxray.on.coocan.jp/Delphi/Others/Array_Message.htm#05


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82