PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
18791 | 03/02/05 14:14:43 | RE(3):PB7.0: bregexp.dll実行時にエラーになる。 By yuji123 |
18785 | 03/02/05 12:28:59 | RE(2):PB7.0: bregexp.dll実行時にエラーになる。 By にしやん |
18778 | 03/02/04 14:58:15 | RE(1):PB7.0: bregexp.dll実行時にエラーになる。 By Potato |
18776 | 03/02/04 14:06:48 | PB7.0: bregexp.dll実行時にエラーになる。 By yuji123 |
カテゴリ:スクリプトの記述
日付:2003年02月05日 12:28 発信者:にしやん
題名:RE(2):PB7.0: bregexp.dll実行時にエラーになる。
yuji123さん、こんにちは。
BREGEXP.DLL の Replace 関数は、VBでは次のように宣言します。
Private Declare Function Replace Lib \"bregexp\" _
(szRegstr As String, szTarget As String) As String
引数に値が返るわけではないのですが、
ByVal が付いていないので参照渡しになっています。
かなり以前に BSMTP.DLL について書きましたが、
そのときの経験から、VB用のAPIで String 型の参照渡しの場合は、
引数が文字列のポインタのポインタになり、PBで REF String で宣言しても
利用できないことがわかっています。
この関数の場合もそれと同じのようです。
よって、PBで利用するには次のようにします。
◆外部関数
FUNCTION String Replace(REF UnsignedLong szRegstr, REF UnsignedLong szTarget) &
LIBRARY \"BREGEXP.DLL\"
FUNCTION UnsignedLong lstrcpyn(REF String dst, REF String src, Long length) &
LIBRARY \"KERNEL32.DLL\" ALIAS FOR \"lstrcpynA\"
◆スクリプト
//変数宣言
String szRegstr, szTarget
UnsignedLong lpszRegstr, lpszTarget
String ret
//引数セット
szRegstr = \"パターン文字列\"
szTarget = \"対象文字列\"
//引数のポインタ値取得
lpszRegstr = lstrcpyn(szRegstr, szRegstr, 0)
lpszTarget = lstrcpyn(szTarget, szTarget, 0)
//Replace 呼び出し
ret = Replace(lpszRegstr, lpszTarget)
//ret に置換後の文字列が返ります。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.