問題タブ [wsastartup]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 静的ラッパー ライブラリ (winsock 用)、XXX への未定義参照
winsock api (winsock ラッパー ライブラリ) の関数を使用する静的ライブラリを作成したいと考えています。libws2_32.a をインクルードし、コンパイラ オプション -lws2_32 を追加します。別のプロジェクトでこのライブラリにリンクすると、次のエラーが表示されます。
ライブラリで使用しているすべての種類の winsock 関数に対して。libws2_32.a をインクルードし、ライブラリも含むプロジェクトにオプション -lws2_32 を追加しました。CodeBlocks IDE と MinGW 64 ビット コンパイラを使用しています。どうすればこれを修正できますか? そのような静的ラッパーライブラリを書くことさえ可能ですか?
編集 1コンパイラ オプション -lws2_32 を削除しました。新しいビルド ログは次のようになります。ただし、winsock 関数エラーへの未定義の参照がまだあります。
EDIT 2静的ライブラリを含むプロジェクトでWSAStartup(ws2_32のwinsock関数)を呼び出してみましたが、コンパイラオプション-lws2_32を使用すると正常に動作します。実際には(プロジェクト「Stock」でWSAStartupを呼び出すと)、WSAStartup関数への未定義の参照エラーは、含まれている静的ライブラリに対してもスローされません。ただし、他のすべての winsock 関数にはまだこのエラーがあります。
c# - C# (Windows Phone 7) で WSAStartup() を呼び出す方法は?
目標: Windows Phone 7 の名前 (「My Windows Phone」など) を取得する。
上記のコードは C++ で提供されていますが、C# に変更したいと考えています。理由の 1 つは、私が Visual Studio 2012 Express しか持っておらず、C++ を Windows Phone プロジェクトと一緒に使用することができず、VS2013 を既に購入しているため、これだけのために VS2012 を購入する余裕がないためです。もう 1 つの理由は、C++ の依存ファイルが 150 を超えていることです。これはコードが多すぎます。
だから、私の最初の試み:(http://www.experts-exchange.com/Programming/Languages/.NET/Q_21014265.htmlに触発された)
WSAStartup(0x0002, out dummy);
例外で失敗します:
MyLibrary.dll で、タイプ 'System.MethodAccessException' の初回例外が発生しました
追加情報: メソッドにアクセスしようとして失敗しました: MyLibrary.WSAStartup(System.Int16, .WSAData&)
そして私の2回目の試み:( Convert service name to port に触発された)
NativeMethods.WSAStartup(0x0202, ref dummy);
例外で失敗します:
MyLibrary.dll で、タイプ 'System.MethodAccessException' の初回例外が発生しました
追加情報: メソッドにアクセスしようとして失敗しました: MyLibrary+NativeMethods.WSAStartup(System.Int16, .WSAData&)
WP7 デバイスで動作させるためのアドバイスはありますか?
[編集:この投稿は、バージョン 0x0101 で WSAStartup() を使用する可能性も示唆しています]
c# - 3 回の呼び出しが成功した後、Web サービス呼び出しで WSAStartUp エラーが発生する
.DLL を介して一部のアクセス デバイスのサーバーとして機能する C# winforms アプリケーションがあります。
ユーザー アクセスは、入力を Web サービス (Web 参照として設定) に送信し、結果をデバイスに返すことによって決定されますが、タイムアウトの場合、アプリはすべてのデバイスを切断し、サーバーを停止し、バックグラウンド ワーカーを起動します。バックグラウンド ワーカーは Web サービスへの接続を再試行し、成功した場合はサーバーを再起動し、デバイスを再接続します。
これはすべて非常にうまく機能しますが、残念ながら、3 回目または 5 回目にバックグラウンド ワーカーが Web サービスに再接続しようとすると、「アプリケーションが WSAStartup を呼び出していないか、WSAStartup が失敗しました」という例外で接続が失敗します。次の試行ごとに、同様のエラーが発生します。
バックグラウンド ワーカーのソース、非常に単純なコードは次のとおりです。
補足として、それ以外の場合、Webサービスは魅力的に機能します。
windows-ce - WSACleanup を呼び出さない場合の結果
ヘッドレス Windows CE 6.0 デバイスで実行するアプリケーションを設計中です。アイデアは、起動時に開始され、電源がオフになるまで実行されるアプリケーションを作成することです。(基本的にはサービスのように見えますが、アプリケーションは、停止/デプロイ/開始/プロセス プロシージャへのアタッチという面倒な作業がなくてもデバッグが容易です)
私の懸念は、開発中に何が起こるかです。アプリケーションをデバッグ/デプロイすると、フレンドリーで簡単な方法でアプリケーションを閉じる方法がわかりません。(より良い/ユーザーフレンドリーな方法でこれを行うことができるかどうか提案してください) デバッガーを停止するだけで、結果は WSACleanup が呼び出されません。
では、質問です。WSACleanup を呼び出さないとどうなりますか? デバッガーを使用して、winsock アプリケーションを再度起動して実行することはできますか? それとも、そうするのを妨げるリソース リークがありますか?
前もってありがとう、ジェフ
windows - プログラムを終了する前に WSACleanup を呼び出す必要がありますか?
を呼び出す Windows ソケット プログラム (XP 以降) がありますWSAStartup
。WSACleanup
プログラムが終了する前に呼び出す必要がありますか? そうしないと、悪影響はありますか?特に次のとおりです。
ただの出品物とは異なりexit(0)
ます。Win16WSACleanup
では、システム リソースがリークする可能性があるのを省略すると、まだそうであることがわかります。
c# - .NET での WSAStartup の使用は 64 ビット アプリで安全ですか?
フィールドの順序が異なるため、64 ビット アプリの場合、WSAData 構造体の .NET Framework バージョンとネイティブ Win32 バージョンの間に不一致があります。C# ベースの製品で使用するために .NET バージョンをコピーしましたが、同僚が私がメモリ破損を引き起こしたのではないかと心配しています。DllImport / PInvoke を使用する場合、この不一致が原因でメモリが破損するリスクはありますか? ネイティブ バージョンをマネージド バージョンにマーシャリングするときに、無効なメモリ アクセスのリスクはありますか? 結果の WSAData オブジェクトのフィールドに実際にアクセスすることには関心がないと仮定しましょう。WSAStartup の呼び出しによってメモリが破損したり、アプリがクラッシュしたりしないことを確認したいだけです。
WinSock2.h のネイティブ C++ バージョンを次に示します。メンバーの順序は、64 ビットと 32 ビットでは異なることに注意してください。WSADESCRIPTION_LEN は 256 で、WSASYS_STATUS_LEN は 128 です。
.NET Frameworkのマネージ バージョンは次のとおりです。
c# - C# からネイティブ Windows API 関数をピンボーク/呼び出す
C# アプリケーション内から、外部 DLL の関数を使用します。この DLL 自体がネットワーク関数を使用します。そのため、C# アプリケーションから Winsock を初期化して、ネットワーク ソケットがこの DLL に対して機能するようにする必要があります。それが初期化のためにWSAStartupを実行しようとする方法ですが、うまくいかないようです:
WSAStartup() は正常に呼び出されたようですが、使用された DLL はまだネットワークにアクセスできません。そのため、何らかの理由で WSAStartup() が機能しなかったようです。ここで私が間違っていることはありますか?
敬具
マイケル