喫茶XRAYトップページ

[スレッド全体
]

[12026] PAnsiCharをStrPCopy関数で使用返信 削除
2018/7/11 (水) 06:27:25 Mr.XRAY
Unicode 版の Delphi で PAnsiChar 型の文字列を StrPCopy 関数で使用する
場合は,次のように,uses に AnsiStrings を追加して明示的に AnsiStrings を
記述しみてください.

implementation

uses
  AnsiStrings;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LPAnsiChar  : PAnsiChar;
begin
  LPAnsiChar := AllocMem(200);
  try
    AnsiStrings.StrPCopy(LPAnsiChar, '日本語 ABC 文字列');
    Memo1.Lines.Add(string(LPAnsiChar));
  finally
    FreeMem(LPAnsiChar);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  LAnsiString : AnsiString;
  LPAnsiChar  : PAnsiChar;
begin
  LAnsiString := '日本語 ABC 文字列';
  LPAnsiChar  := AllocMem(Length(LAnsiString) + 1);
  try
    AnsiStrings.StrPCopy(LPAnsiChar, LAnsiString);
    Memo1.Lines.Add(string(LPAnsiChar));
  finally
    FreeMem(LPAnsiChar);
  end;
end;



[12032] Re:PAnsiCharをStrPCopy関数で使用返信 削除
2018/7/11 (水) 11:58:59 Mr.XRAY
> AnsiStrings を追加して明示的に AnsiStrings を

Move 関数を使ってしまう手もあります.
Move 関数を使用する場合は uses に AnsiStrings は不要です.

※ Length(Ansi文字変数) はバイト数を返します.

procedure TForm1.Button3Click(Sender: TObject);
var
  LAnsiString : AnsiString;
  LPAnsiChar  : PAnsiChar;
begin
  LAnsiString := '日本語 ABC 文字列';
  LPAnsiChar  := AllocMem(Length(LAnsiString) + 1);
  try
    Move(LAnsiString[1], LPAnsiChar^, Length(LAnsiString));
    Memo1.Lines.Add(string(LPAnsiChar));
  finally
    FreeMem(LPAnsiChar);
  end;
end;


[12038] RS-232Cコンポーネント返信 削除
2018/7/12 (木) 06:23:43 Mr.XRAY
Delphi 6 から Delphi 10 に移行中で,RS-232C 用の CommX を Delphi 10 で
使用可能にするために「苦戦」(失礼 !) されているんですね.

私は RS-232C (COM ポート) の制御はやったことがないのですが,
unicode 版の Delphi で利用可能なコンポーネント類があったと思います.

あったとして,それを使用することになっても,苦戦した内容は今後役に立つと
思ってくださいませ (笑).

例えば
[ [Blog] Delphi / C++Builder RS232cコンポーネント MITライセンス配布版[JAPAN]]
https://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1865.0

他にも探せばあると思いますが,私は調べていません.あしからず.
検討をお祈りしています.
時間があったら喫茶XRAY にもお立ち寄りくださいませ.
飲み物は自分持ちとなっております (^^)


[12039] Re:RS-232Cコンポーネント返信 削除
2018/7/12 (木) 06:53:37 Mr.XRAY
> 私は RS-232C (COM ポート) の制御はやったことがないのですが,

PC-9801 の時代ならやったことあります (笑)


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