自作関数の返り値がおかしい

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 自作関数の返り値がおかしい

関数側に問題がありました

by NON » 2006年2月03日(金) 17:19

ご教授いただいたコードで試していたところ、
関数側でも「BytePtrに代入」している(返り値を指定する部分です)
ことに気づき、関数側に「lstrcpy(WordCut, 内容) 」とコーティングしたところ、正常に返ってくるようになりました。
BytePtr型への代入方法など勉強になりました。ありがとうございました。

by イグトランス » 2006年2月02日(木) 22:03

> b="abcde"'切り取る対象の文字列
> c="c"'切り取る部分の文字
おそらくこれですね。
ダブルクォーテーションで括った文字列リテラルはそれ自体アドレスを持っています。
つまりポインタ型に対して文字列を代入するとその文字列自体へのポインタが代入されます。
つまり次のようにlstrcpyを使ってみてください。

コード: 全て選択

lstrcpy(a, "abcde")
lstrcpy(c, "c")
また,関数は戻り値がどうなるかを全く知ることができません。
つまりWordCut関数は戻り値がcallocでメモリの確保されている変数だと言うことがわからないと言うことです。
つまりb=calloc(5)は無駄です。
もしWordCut関数もNONさんが作ったDLLならcに対してcallocを行うのではなく,
たとえばWordCut関数内部でcallocを行うという方法が考えられます。

自作関数の返り値がおかしい

by NON » 2006年2月02日(木) 21:21

「指定した文字列まで切り取る」DLLを作っていて、関数内部では処理が正常に行われているのに、返り値にすると変なデータが返ってきてしまいます。

'以下呼び出し部分のソース
dim a as BytePtr
dim b as BytePtr
dim c as BytePtr
a=calloc(5)
b=calloc(5)
c=calloc(5)
b="abcde"'切り取る対象の文字列
c="c"'切り取る部分の文字
a=WordCut(b,c)'BytePtr型で返ってきます。本当なら「ab」となるはずなのですが・・・
msgbox 0,MakeStr(a)
end

ページトップ