Date:
2005-01-22
WZマクロからPythonコードを実行する2¶
先日作った pygw [1] を拡張して、 Python のprint文出力先をWZの任意の関数に接続できるようにしてみた。
WZマクロの例:
#include <windows.h>
#include "pygw.h"
static FARPROC PrinfRegCode; //RegCode
void CALLBACK Print(char* str)
{
printf(str);
}
int main(TX* text)
{
PrinfRegCode = txpcodeRegisterCallback( Print, 1 );
PYGW_SetStdout( PrinfRegCode );
PYGW_Pygw("pywz","func1","teststrings");
PYGW_Pygw("pywz","func2","teststrings");
PYGW_Pygw("pywz","func3","reduce(lambda x,y:x+y,[x for x in range(0,10)])");
PYGW_Pygw("pywz","func4","Hello");
txpcodeUnregisterCallback( PrinfRegCode );
PrinfRegCode = NULL;
return 0;
}
呼び出されるPythonコードの例:
import stdout
def func1(x):
print "1: ", len(x)
return len(x)
def func2(x):
print "2: ", x
return 0
def func3(x):
print "3: ", x, " ==> ", eval(x)
return eval(x)
def func4(x):
print "4: ", [s for s in x]
return len(x)
実行結果:
1: 11
2: teststrings
3: reduce(lambda x,y:x+y,[x for x in range(0,10)]) ==> 45
4: ['H', 'e', 'l', 'l', 'o']
実行結果はもちろんWZのSTDOUTに出力される。以下が証拠画像だ!(ねつ造じゃないよ?)
file: pygw20050121.lzh