タイトル通りなのですが、WideString(AnsiString).Copy()というソースコードを自分の参考にしているプログラムに頻繁に使われています。
具体的には、Login(ANSIString, ANSIString)という関数におきまして、
Login(WideString(Edit1->Text).Copy(), WideString(Edit2->Text).Copy());と書かれております。
いったいなぜこんな面倒な書き方をとっているのでしょうか?
C言語とか他の言語とかが関係しているのでしょうか?
すいません。Loginという関数はActiveXであって定義としては、Login(BSTR, BSTR)となっておりました。
BSTRというのがどうも臭います。うーむ。
C++Builder(C/C++言語)のソースみたいですね。
確か、C++Builderでは、WideStringなどの文字列型は、”型”ではなくクラスとして定義されているはずです。たから、WideString(AnsiString).Copy()は、WideStringのCopyメソッドを呼び出しているということだと思います。
C++Builderをあまり使ったことがないのでCopyメソッドが何をするかわかりません。ヘルプ等で調べてみてください。
>すいません。Loginという関数はActiveXであって定義としては、Login(BSTR, BSTR)となっておりました。
なるほど。ということは、Copy()はWideStringオブジェクト中の文字列をBSTR型(Char型のポインタかな?)で返すということかな?
なるほど、確かにこのプログラムからいくとそのようです。
BSTR型っていったいどんなものなんでしょうか?
Broad STRing???
http://www.borland.co.jp/qanda/cbuilder/c0009454.html
なんてのが、ありますけど。参考になります?
通りすがりさんのレス、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じゃないんでなんとも...。)
ツイート | ![]() |