WSHでWin32APIを呼び出す-その13
2005年10月26日
(←戻る)
前の記事で、Malloc周りを変えたいと書いたが、その為のプログラムの変更を行っていてあることに気が付いた。ver 0.1.2.2 では、ユーザ定義型の変数用のメモリを確保するため、dwtools.dll のソースコードの冒頭部分で次のように記述している。
このままだと、このmBuff[65536]の部分がdllファイルに含まれてしまうため、dll が無駄に大きくなってしまう。つまり、128kb の部分に延々と0xFFが書かれたようなdllファイルが出来てしまうわけだ。
ところが、このやり方を採ったことが逆にうまくいく結果を生み出していることが判明した。このソースコード冒頭部分を試しに次のように書き換えてみる。
dllMain関数内にイニシャライズのためのコードを作成してある。この方法で、もともと152kb あったdllファイルのサイズを24kbまで減らすことが出来た。ところが、である。このdwtools.dllを用いてOpenFile.vbsを実行すると、アクセス違反のダイアログが出て正常に機能しなかった。
mBuff[65536]={0xFFFF};と表記した場合と、mBuff[65536];と表記した場合で異なるメモリ領域にこの配列が確保されるはずであるが、mBuff[65536];と宣言した場合に確保されるメモリ領域にはvbsや、そこから呼び出したWinAPIからアクセスできないということである。これは少し驚いた。というか、驚いたのはmBuff[65536]={0xFFFF};と表記した場合にアクセスできるということなのであるが。
つまり、イニシャライズのためのルーチンを記述することを面倒くさがって簡単に済ませていたことが逆に幸いしたということである。ということで、ver0.1.2.2 は、初期のバージョンとしては比較的完成度が高いということが分かった。そろそろベクターにフリーソフトとして登録しても良いかも。
(続く)
前の記事で、Malloc周りを変えたいと書いたが、その為のプログラムの変更を行っていてあることに気が付いた。ver 0.1.2.2 では、ユーザ定義型の変数用のメモリを確保するため、dwtools.dll のソースコードの冒頭部分で次のように記述している。
#include <windows.h> unsigned short mBuff[65536]={0xFFFF}; int lastMBuff=65536;
このままだと、このmBuff[65536]の部分がdllファイルに含まれてしまうため、dll が無駄に大きくなってしまう。つまり、128kb の部分に延々と0xFFが書かれたようなdllファイルが出来てしまうわけだ。
ところが、このやり方を採ったことが逆にうまくいく結果を生み出していることが判明した。このソースコード冒頭部分を試しに次のように書き換えてみる。
#include <windows.h> unsigned short mBuff[65536]; int lastMBuff;
dllMain関数内にイニシャライズのためのコードを作成してある。この方法で、もともと152kb あったdllファイルのサイズを24kbまで減らすことが出来た。ところが、である。このdwtools.dllを用いてOpenFile.vbsを実行すると、アクセス違反のダイアログが出て正常に機能しなかった。
mBuff[65536]={0xFFFF};と表記した場合と、mBuff[65536];と表記した場合で異なるメモリ領域にこの配列が確保されるはずであるが、mBuff[65536];と宣言した場合に確保されるメモリ領域にはvbsや、そこから呼び出したWinAPIからアクセスできないということである。これは少し驚いた。というか、驚いたのはmBuff[65536]={0xFFFF};と表記した場合にアクセスできるということなのであるが。
つまり、イニシャライズのためのルーチンを記述することを面倒くさがって簡単に済ませていたことが逆に幸いしたということである。ということで、ver0.1.2.2 は、初期のバージョンとしては比較的完成度が高いということが分かった。そろそろベクターにフリーソフトとして登録しても良いかも。
(続く)