プロジェクトを作成し、いつものように 2 つのプラットフォーム (64 ビットと 32 ビット) を作成しました (これは DLL です)。コードを書いてテストしたところ、すべてうまくいきました (私は常に 64 ビット構成でテストします) が、32 ビット XP VM でテストしたかったので、リンクの問題に苦しんでいます。
コードで API WSASelectEvent を (他の多くの WSA/Winsock API と同様に) 使用していますが、32 ビット構成でのみ、リンカーは _WSASelectEvent を見つけることを拒否します。
よく知られている LNK2001 エラーが発生します。
「エラー LNK2001: 未解決の外部シンボル _WSAEventSelect」
私は確かに ws2_32.lib にリンクしており、他の API (WSAStartup や WSACleanup、構造体など、明らかに winsocket を使用するためにコード内にあるものなど) を使用しているため、必ず winsock2.h を含めます。
仕事の途中で構成をいじるのが好きであることを知っているので(これはかなり小さなプロジェクトであり、大きすぎません)、ビジュアルスタジオで新しいプロジェクトを作成し、コードを配置してコンパイルする新しいプラットフォームを作成しました(もちろんGUIで)しかし、同じ結果が得られました。
私は2〜3時間ネットサーフィンをして修正がありませんでしたが、コンパイルコマンドラインとリンクコマンドラインを比較してみましたが、通常の /MACHINE:x64/x86 フォルダーとターゲットフォルダーはまったく同じです。
この問題またはその解決策を知っていますか?
注:: インテリセンスはこれについて警告し、Visual Studio は WSASelectEvent( が書き込まれたときにパラメーター リストを提案しませんが、[定義に移動] を実行すると確実に Winsock2.h に移動します。