WideString(AnsiString).Copy()とは?


kkk  2003-11-14 21:04:10  No: 5656

タイトル通りなのですが、WideString(AnsiString).Copy()というソースコードを自分の参考にしているプログラムに頻繁に使われています。
具体的には、Login(ANSIString, ANSIString)という関数におきまして、
Login(WideString(Edit1->Text).Copy(), WideString(Edit2->Text).Copy());と書かれております。
いったいなぜこんな面倒な書き方をとっているのでしょうか?
C言語とか他の言語とかが関係しているのでしょうか?


kkk  2003-11-14 21:28:11  No: 5657

すいません。Loginという関数はActiveXであって定義としては、Login(BSTR, BSTR)となっておりました。
BSTRというのがどうも臭います。うーむ。


masayan  2003-11-14 21:47:12  No: 5658

C++Builder(C/C++言語)のソースみたいですね。
確か、C++Builderでは、WideStringなどの文字列型は、”型”ではなくクラスとして定義されているはずです。たから、WideString(AnsiString).Copy()は、WideStringのCopyメソッドを呼び出しているということだと思います。
C++Builderをあまり使ったことがないのでCopyメソッドが何をするかわかりません。ヘルプ等で調べてみてください。


masayan  2003-11-14 21:54:35  No: 5659

>すいません。Loginという関数はActiveXであって定義としては、Login(BSTR, BSTR)となっておりました。

なるほど。ということは、Copy()はWideStringオブジェクト中の文字列をBSTR型(Char型のポインタかな?)で返すということかな?


kkk  2003-11-15 00:26:44  No: 5660

なるほど、確かにこのプログラムからいくとそのようです。
BSTR型っていったいどんなものなんでしょうか?
Broad STRing???


通りすがり  2003-11-15 00:56:58  No: 5661

http://www.borland.co.jp/qanda/cbuilder/c0009454.html
なんてのが、ありますけど。参考になります?


masayan  2003-11-15 02:02:27  No: 5662

通りすがりさんのレス、Copyというメソッド名からして、WideString(AnsiString).Copy()は、AnsiStringをWideStringにキャストして、さらにそのインスタンスのコピーを作るということみたいですね。

ということは...

  Login(WideString(Edit1->Text).Copy(), WideString(Edit2->Text).Copy());

をDelphiに翻訳すると...

var
 s1,s2 : WideString;
begin
 s1 := WideString(Edit1.Text); // <- WideString(Edit1->Text).Copy()
 s2 := WideString(Edit2.Text); // <- WideString(Edit2->Text).Copy()

 Login(s1,s2);
   :

ということかな?(これ以上は、Delphiじゃないんでなんとも...。)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加