現在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)
文字列の先頭アドレスで返ってきた値を取得するためにはどうしたらよいのでしょうか?
TBStrで返せばOKです。
DLL側で、
Result := SysAllocStringByteLen(PCHAR(戻したい文字列の変数), Length(戻したい文字列の変数));
とすればよろしいかと。
uses節に、ActiveXが必要かもしれません。
>Result := SysAllocStringByteLen(PCHAR(戻したい文字列の変数), Length(戻したい文字列の変数));
この関数で戻ってくるのは、先頭のアドレスと残りの文字数ってことなんでしょうか?
この関数を使った場合にVBはStringで取得し、DelphiではPcharということになるんでしょうか?
質問ばかりですいません。解答おねがいします。
VBに文字列を返す場合、BSTR型(DelphiではTBStr)で返さないといけません。
ByValの文字列引数であれば、PCHARでOKです。
ByRefの文字列引数は、やはりBSTRで返す必要があります。
ここで示したものは、
Result := 戻したい文字列の変数;
に入れ替える部分です。
先頭云々の処理は自前でやってください。
思考錯誤してなんとかできました。
にしのさんありがとうございました。
ツイート | ![]() |