Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] Split の戻り値をそのまま関数に渡すと、Notes Client が応答なしになる場合がある

「Split」は R6 から追加された便利な組み込み関数ですが、戻り値をそのまま関数に渡すと Notes Client が応答なしになる場合がある、というとんでもない落とし穴があるみたいです(- -メ

以下にサンプルコードを記載します。

※以下のコードを実行すると、クライアントが応答なしになる場合があります。実行は自己責任にてお願いします。

Sub Initialize
	Dim r As Variant
	r = test(Split("aa,bb", ",")) '戻り値を直接関数に渡している
	Msgbox Join(r, ";")
End Sub
Function test(arg As Variant) As Variant
	Dim v As Variant
	v = arg 'ローカル変数にコピー
	v(0) = "cc"
	test = v '戻り値を返している
End Function

上記のコメント部分がポイントで、関数内でローカル変数にコピー → 戻り値として返す、という部分も影響している感じです。上記はR6.0.4の結果で、バージョンによっては、「r = test(Split("aa,bb", ","))」の部分を何回も実行する、関数の戻り値で引数とは無関係な配列を戻す、といった条件がないと現象が発生しないかもしれませんが、基本的なポイントは上記のコードのとおりです。

解決策は、以下のように Split の戻り値をそのまま関数に渡さないで、いったん変数におくだけでOKです。

Sub Initialize
	Dim r As Variant
	Dim a As Variant
	a = Split("aa,bb", ",")
	r = test(a)
	Msgbox Join(r, ";")
End Sub
(関数部分はそのままでOK)

わたしはこの原因を調べるのに半日潰しました(もっと複雑なコードだったので)…… 😥 皆さんもご注意を……。

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 7813 to the field below:

^
×