Delphiで使用するDLLを作成したいのですが
例えば以下のように、文字列を取得した場合は
どのように関数を定義するべきなのでしょうか。
1.CString get()
2.void get(CString str)
3.void get(char *str)
4.*char get()
1,2は、CStringなんかDelphiで使えそうも無い。
4は、スタックに入れたらなくなっちゃうし
ヒープに入れたら開放しなくちゃいけないし、無理そう。
3が妥当でしょうか?
環境:Windows2000,VC++6.0
ですね。
ただ、呼び出し側から与えた 格納領域を超えてしまうケースを考慮したほうが良かろうかと。
たとえば
int get(char* buffer, int size);
領域(buffer)とその大きさ(size)を与える。
返り値は格納された文字列の長さ、-1ならオーバフロー
とか。
ありがとうございます。
また、
int get(char* buffer, int size);
の案も必要そうならこの案でいこうかと思います。
(Delphiを触ったことがなく、現状↑で本当に良いかどうか判断が
できないもので)
解決にしていたのですが、気になったことがひとつ。
戻り値に STLのstring を使用することはできるのでしょうか。
std::string を受け取った Delphi はどうすりゃいいんです?
第一ヘッダがないでしょうに
STLもDelphiもよく知らないのに思いつきで質問してしまいました。すいません。
stringをDelphiのStringに勝手に変換してくれないかなぁと甘い期待をしました。
今、調べてみたら
>Delphi の String 型は,初めの 1byte 目に文字列の長さが格納されているため
という文章を見つけました。変換してくれそうもないですね。