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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.