喫茶XRAYトップページ

[スレッド全体
]

[11472] Re2:DLLの関数に文字列を渡す返信 削除
2017/10/16 (月) 17:39:56 Mr.XRAY
[DLLとの文字列の受け渡しがうまくいきません ]
https://forums.embarcadero.com/thread.jspa?threadID=258840&tstart=0#903352

上で提示したコードの場合,StrCopy を使用する必要がないのであれば,
以下のように PChar 型の変数に代入できます.
StrAlloc でメモリを確保した場合は StrDispose でメモリを解放します.

procedure TForm1.Button1Click(Sender: TObject);
var
  LPChar : PChar;
begin
  LPChar := PChar('ABCDE');
  Edit1.Text := BoolToStr(SetText2Dll(LPChar));
end;


[11473] Re3:DLLの関数に文字列を渡す返信 削除
2017/10/16 (月) 17:57:46 Mr.XRAY
> 上で提示したコードの場合,StrCopy を使用する必要がないのであれば,

どうしても StrCopy を使用する必要がある場合は,
例えば以下のように書けます.
質問された方のコードは省略があるので参考です.
この上もこのコードも動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.

procedure TForm1.Button2Click(Sender: TObject);
var
  LText  : string;
  LPChar : PChar;
begin
  //+1はnull終端文字の分
  //これがないと無効ポインタの操作となる
  LText := 'ABCDE';
  LPChar := StrAlloc(Length(LText) + 1);
  try
    StrCopy(LPChar, PChar(LText));
    Edit1.Text := BoolToStr(SetText2Dll(LPChar));
  finally
    StrDispose(LPChar);
  end;
end;

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