2014年6月5日木曜日

【VBA】Windows 64bit で発生するDeclareエラーの対応方法

2014年4月でWindows XPのサポートが終わってしまいましたね。
自宅の開発環境はしばらくXPを使い続けていましたが、セキュリティ的にいつまでもXPというわけにも行かないので、一念発起し、Windows 7 環境へ移行しました。

移行後、Excelマクロを立ち上げたところ、以下のようなエラーメッセージが。
"このプロジェクトのコードは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認及び更新を行い、次に Declare ステートメントに PtrSafe 属性を指定してください。"

ううむ。OSアップデートの洗礼か、はたまた32bitから64bit化したことによる影響か・・・

どうやら、Windowsが64bitだと Declare Function の箇所でエラーになってしまうようです。
メッセージ通り、Declare に PtrSafe を指定すれば解決しました。ほっと一安心。

【修正前】

Public Declare Function 関数名 ...

【修正後】

Public Declare PtrSafe Function 関数名 ...

ExcelのVBAで作成した便利ツールがいくつかあり、自宅でもWindows 7化対応をしなくちゃだめなのか・・・と思いましたが、簡単な修正で済んで一安心です。

【ルータ】ヤマハ RTX1100 ルータのsyslogを取得する

ヤマハのルータ(RTX1100)でsyslogを取るようにしたのでメモ。

構成
取得元(ルータ):YAMAHA RTX1100
保存先(サーバ):CentOS 6.4

1.サーバ側の設定

syslogにはrsyslogを使います。
rsyslogはCentOS 6.0からの標準装備なようですね。

1)rsyslogのコンフィグの設定 - 外部ホストの許可

viで開いて。

sudo vi /etc/rsyslog.conf

外部ホストのsyslogを受け付けるようにします。
以下のコメントを外す。
RTX1100はsyslogはUDPのようなので、とりあえずUDPだけ外しました。

修正前

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

修正後

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

2)rsyslogのコンフィグの設定 - ルールの追加

「#### RULES ####」コメント直下に追加。

#### RULES ####
:fromhost-ip, isequal, "192.168.1.250" -/var/log/rtx1100.log
& ~

1行目
:fromhost-ip,は送信元IP
isequal,は演算子でイコールの条件。
"192.168.1.250"はルータのIPアドレス。
-/var/log/rtx1100.log はログの保存先

2行目の"& ~"は1行目の条件に一致したら、以降のルールは評価せず終わりという意味。
これがないと以降のルールも評価して、合致した場合に無駄なログが書かれてしまうので入れておく。

コンフィグを修正したら保存します。

3)rsysconfigの再起動
設定変更を反映させるため再起動する。

sudo service rsysconfig restart

4) iptablesの設定

ポートを閉じている場合、ポートを開けてやります。
syslogのポートは514なので、そいつを開けてやります。
iptables変更後は、忘れずにデーモンを再起動。


2.ルータ側の設定

telnetでルータにログオンして、administratorにスイッチ。
設定を変更します。


syslog info on
syslog notis on
syslog debug on
syslog host 192.168.1.10
syslog facility local0

syslog info、syslog notis、syslog debug は出力するログの有無。
とりあえずすべてONにします。

syslog host はsyslogを受けるホストのIPアドレスを指定。
今回は保存先のCentOSのIPアドレスを指定します。

syslog facility はsyslogの分類にあたるもの。
サービスに応じて、mailとかcronとかがあり、local0~7が汎用なので、今回はlocal0にしておく。

パケットダンプを見たかったので、以下も設定しておく。

packetdump lan1 100

lan1 はダンプしたいインタフェース名。
100 はダンプするパケット数。
infinityにすると制限なくダンプを出力してくれるそうだけど、必要な分を見ると思うのでパケット数指定が無難でしょう。

こいつは"syslog debug on"にしておかないと機能しないそうなので、忘れずにONにしておく。

http://www.rtpro.yamaha.co.jp/RT/manual/nvr500/logging/packetdump.html


RTX1100の設定変更は即反映されるけど、忘れずにsaveで保存する。


これで、ルータのsyslogが取得できました。


パケットダンプはこんな感じで出力されます。

Jun  5 12:20:56 LAN2 IN: IP TCP 69.192.178.110:443 > 172.20.10.5:61627
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 LAN2 IN: IP TCP 199.59.150.46:443 > 172.20.10.5:60191
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00