ATL 7.1 とかのバグ

822334 – BUG: Cannot Locate the Procedure Entry Point FreeAddrInfoW When You Run an Application on Windows XPVisual Studio.NET 2003 のダメっぽいバグです。
Miech のソースに手を入れて遊ぼうかと思ったら、Visual Studio .NET 2002 らしいので 2003にコンバート、少しソースに手を入れてコンパイル通したところEXEの起動で、GetAddrInfoWやFreeAddrInfoW というAPIが無いとOS様が仰せになるのでいろいろ調べてみたところ、VS.NET2003のバグらしい。Winsock2 の API の問題のようで、解決手段はまだ提供されてないみたいです。
自前でパッチあてれば何とかなるような気もしますが、正式な手段が出るといいなぁと。
とりあえず、2003ではコンパイルは通るけど動かないです(^_^;


Miechで使ってるパーツ類は、2003非互換(というか、ISO C++ の準拠度が低い)ソースがいくつか見受けられるものの、機械的に変換(typename とか)すれば、コンパイルは通るようになります。
現時点で動くようにしようとすると、 ATL の CSocketAddr の atlsocket.h と atlsocket.inl あたりのGetAddrInfoW, FreeAddrInfoW 周りのコードをいじる必要がありそうですね。
ADDRINFOT の代わりに ADDRINFOA で受けるようにして、ADDRINFOA を 文字コードに応じて AかWに変えるようにすればT互換、変換かけるところは、ai_canonname メンバだけでいいっぽい、でもリストになってるみたいだからそう単純じゃないかも……
atlspriv.inl の
inline bool ZEvtSyncSocket::Connect(LPCTSTR szAddr, unsigned short nPort)
をCSocketAddr 使わずに動くようにいじるのが早そう、CSocketAddrからばらして埋め込めばいいし
とりあえず暇だったらためしてみよう

  1. コメントはまだありません。

  1. トラックバックはまだありません。