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からばらして埋め込めばいいし

とりあえず暇だったらためしてみよう

About this Entry

This page contains a single entry by mutsumi published on 2004年3月21日 03:40.

SourceGrid was the previous entry in this blog.

ワイヤレスヘッドフォン is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Pages

Powered by Movable Type 5.031