[kansaipm] Re:セミナーで発表した資料

Kawai,Takanori kawai at nippon-rad.co.jp
Tue May 30 19:44:02 CDT 2000


川合孝典です。

----- Original Message -----
From: <mishima at momo.so-net.ne.jp>
To: <kansai-pm-list at pm.org>; <kroonyao at mail.goo.ne.jp>
Sent: Wednesday, May 31, 2000 10:29 AM
Subject: [kansaipm] Re:セミナーで発表した資料

まずは

> > あ,ActiveState のPerl でexe ファイルを書き出すコマンドが
> > あるんですね.そういえば,ActiveState のWeb ページで見たような‥
>
> を。確かにドキュメントに pl2exe のことが載ってる。
> でも、現物がないのはなぜだ?
pl2exeについては別だったように思います。
http://www.activestate.com/pdk/

に以前情報があったようです。
#止まっているのか、ActiveStateにアクセスできません。
#なんでや(?_?)

なおPerl2exeというものもあります。
http://www.dynamicstate.com/

どちらも以前Perl-Win32-Jで話題になったのを覚えていただけという
レベルですけども。

> > Perl の話題から逸れますが,VB を使ってコマンドライン上で
> > 動くexe ファイルって書けるんでしょうか?
>
> 書けますよ。でも、標準入出力を扱う関数が無いんです。
> そんなバカなと思って、ヘルプやらWebやらを探し回ったことがあるの
> ですが、結局見つかりませんでした。
> #もし、知っている人がいたら教えてください。
ということでしたので、Perlの話ではありませんが...

VBから標準入力から読み込んだり、標準出力、エラー出力に書き込むことは
VBの関数では用意されていません。
そのため、以下のようなWin32APIを使用します。
VBではUnicode、入出力はSJISで行われるので、コード変換をしなければいけないことに注意が
必要です。
#改行がはいってしまったら適当なところでつなげてください。(^^;;;

=入出力の例=
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function ReadFile Lib "kernel32" _
  (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _
  lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" _
  (ByVal hFile As Long, ByVal lpBuffer As String, _
  ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long

Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&

標準出力への出力例
    hStdOut = GetStdHandle(STD_OUTPUT_HANDLE)
    sData = "Hello World" & vbCrLf
    sOut = StrConv(sData, vbFromUnicode)
    lOff = 0
    PrnOut = WriteFile(hStdOut, sData, LenB(sOut), lOff, ByVal 0&)

標準入力からの読み込み
        hStdIn = GetStdHandle(STD_INPUT_HANDLE)
        lContLen = Val(Environ("CONTENT_LENGTH"))
        sBuff = String(lContLen, Chr$(0))
        lRead = lContLen
        lRet = ReadFile(hStdIn, ByVal sBuff, lContLen, lRead, ByVal 0&)
        sCgi = StrConv(LeftB(StrConv(sBuff, vbFromUnicode), lRead), vbUnicode)

==============================================
川合 孝典(Hippo2000)
   Mail: kawai at nippon-rad.co.jp  GCD00051 at nifty.ne.jp
   http://member.nifty.ne.jp/hippo2000
==============================================




More information about the Kansai-pm mailing list