DLLの返り値について

解決


Syo  2004-08-27 16:13:37  No: 10644  IP: 192.*.*.*

現在DelphiでDLLを作っているのですが、そのDLLをVC,VB,Delphiで呼び出そうと
考えています。
そのDLLの関数の一つに、送られてきた文字列を格納し、格納しきれなかった分の
文字列を返す関数があります。

function Test(sItem : Pchar):Pchar;
こういうイメージです。

これをVBで取得しようとしたときに、返ってきた値(格納しきれなかった文字列)
を取得するためにstring型変数を使っているのですがうまくいきません。

Dim sText As String
Dim sLen As String

sText = "aaaaaaaaaa"
sLen = Test(sText)

文字列の先頭アドレスで返ってきた値を取得するためにはどうしたらよいのでしょうか?

編集 削除
にしの  2004-08-27 16:41:13  No: 10645  IP: 192.*.*.*

TBStrで返せばOKです。

DLL側で、

Result := SysAllocStringByteLen(PCHAR(戻したい文字列の変数), Length(戻したい文字列の変数));

とすればよろしいかと。
uses節に、ActiveXが必要かもしれません。

編集 削除
Syo  2004-08-27 16:59:04  No: 10646  IP: 192.*.*.*

>Result := SysAllocStringByteLen(PCHAR(戻したい文字列の変数), Length(戻したい文字列の変数));

この関数で戻ってくるのは、先頭のアドレスと残りの文字数ってことなんでしょうか?
この関数を使った場合にVBはStringで取得し、DelphiではPcharということになるんでしょうか?

質問ばかりですいません。解答おねがいします。

編集 削除
にしの  2004-08-27 23:13:21  No: 10647  IP: 192.*.*.*

VBに文字列を返す場合、BSTR型(DelphiではTBStr)で返さないといけません。
ByValの文字列引数であれば、PCHARでOKです。
ByRefの文字列引数は、やはりBSTRで返す必要があります。

ここで示したものは、
Result := 戻したい文字列の変数;
に入れ替える部分です。
先頭云々の処理は自前でやってください。

編集 削除
Syo  2004-08-30 09:39:33  No: 10648  IP: 192.*.*.*

思考錯誤してなんとかできました。
にしのさんありがとうございました。

編集 削除