問題タブ [pinvoke]
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# - FtpCommand を介して実行された FTP コマンドから結果を取得するにはどうすればよいですか?
ほとんどの wininet を問題なくラップしましたが、今は行き詰っています。wininet.dll からFtpCommandを p/invoke しようとしていますが、実行するすべてのコマンドで「500 構文エラー」が返されます。dir や ls などの単純なコマンドでさえ。ftp.exe を使用して同じサーバーに接続すると、コマンドは正常に機能し、期待どおりの結果が返されます。
メソッド定義は次のとおりです。
そして、私がそれを呼んでいるコード:
ファイルをダウンロードし、ファイルをアップロードし、FtpFindFirstFile() を使用して dir コマンドを模倣できますが、上記の方法を使用してコマンドを送信できないようです。
編集
SendCommand の私のコードは、SendCommand("DIR") または SendCommand("LS") です。回答の 1 つを読んだ後 (編集中に誰が表示されないかわかりません)、それを SendCommand("LIST") に変更すると、正常に返されました。
しかし、私の質問は、結果を読み取る方法でした.LISTコマンドから返されたデータを読み取るために何を使用して、読み取り可能な形式で出力できるようにしますか?
SendCommand メソッドを更新して、返されたデータを読み取る方法を示しましたが、bytesRead の値は常に 0 です。また、FtpCommand 呼び出しで dataSocket が受け取ったハンドルを渡そうとしましたが、それを行ってもアプリはエラーなしで終了します。
編集2
InternetReadFile を使用して、FtpCommand への呼び出しで返されたデータ ソケットのハンドルからデータを読み取ります。私が使用している InternetReadFile のメソッド シグネチャは次のとおりです。
最終編集
このコードを codeplex でリリースしました:
c# - .NET印刷APIからのデバイスコンテキストの取得
DataCardデスクトップカードプリンターを制御するための.NETアプリケーションに取り組んでいますが、問題が発生しました。磁気ストライプとチップエンコーディングを実行するには、ネイティブプリンターAPI dllの関数を呼び出して、プリンターのインタラクティブモードを有効にする必要があります。
このネイティブ関数を呼び出すためのP/Invokeコードを作成することができました。ただし、問題は、このメソッドがプリンターのデバイスコンテキストハンドルをパラメーターとして受け取り、Gdi32StartDoc関数が呼び出される前に呼び出す必要があることです。
.NET印刷APIでは、GraphicsオブジェクトからhDCにアクセスできます。しかし、私が見る限り、Graphicsオブジェクトは、StartDoc関数が呼び出された後にのみ使用可能になります。
だから私の質問は、StartDocが呼び出される前にコンテキストを取得する方法を誰かが知っているかどうかです。
vb.net - vb.net でフォームの形状を変更する方法
次のコードを使用して、VB 6.0 でフォームの形状を変更していました。
同様に、次のように VB.NET コードを使用しました。
しかし、後者の場合、「タイプ 'Form1' のパブリック メンバー 'hWnd' が見つかりません」というエラー メッセージが表示されます。
私がやること?
visual-c++ - Visual C++ 2005 dll からの .exe の起動
コードを知っている人、または Visual C++ 2005 を使用して .exe を開始する方法についてアイデアを持っている人はいますか?
Windows Mobile の場合、dll が存在する環境。これを行う C# は次のとおりP/Invoke
です。
c# .exe を起動するコード
C++ でそれが必要な理由は、カスタム キャブ インストーラーを実行するときにネイティブ dll を使用して事前および事後 intit チェックなどを実行する必要があるためです。
あなたの考えは大歓迎です。トニー
c# - P/Invoke関数呼び出しの問題
P/Invokeを使用してネイティブCAPIとの対話を必要とするシステムに取り組んでいます。今、私は(まだ)私が決して解決することができないように思われる問題に出くわしました。元の関数は、使用する構造を指定するパラメーターに基づいて、2種類の構造を返すように設計されています。
Cヘッダーファイルは、構造と機能を次のように定義します。
私は次のようなP/Invokeラッパーを実装しようとしました。
「GetCardId」の呼び出しは正常に機能しているようです。呼び出した後、CARDIDTYPEインスタンスでもっともらしいデータを取得します。ただし、「GetCardStatus」を呼び出すと、問題が発生します。返される構造のタイプは「level」パラメータによって定義され、値が1の場合、CARD_INFO_1構造が「pData」で返されます。
ドキュメントには、次のCの例が含まれています。
私の同等のC#実装は次のようになります:
このC#コードを実行すると、メソッドはfalseを返し、Marshal.GetLastWin32Error()は-1073741737を返します(これは私にはあまり意味がありません)。この呼び出しが失敗する理由はわかりません。また、このエラーコードでは間違いありません。そのため、P/Invokeラッパーに問題があると思われます。
pDataのタイプとして「byte[]」を使用することはおそらく正しくないことを私は知っていますが、グーグルによると、「LPBYTE」は「[Out]byte[]」に変換されます。これを行う正しい方法は、pDataをIntPtrとして使用し、Marshal.PtrToStructure(...)を使用して構造を作成することだと思います。これを試しましたが、結果は同じです。このシナリオのコードは次のとおりです。
編集: 私が言及するのを忘れた1つのことは、EntryPoint = "_GetCardStatus @ 28"を指定しない場合、何らかの理由でGetCardStatus呼び出しが不明なエントリポイント例外で失敗することです。これは私がラップした他の関数には起こらなかったので、少し疑問に思いました。
.net - DllImport と ASP.NET
インポートされたメソッドを使用すると、ASP.NET が Dll をロードし、使用が終了した後でもファイルをロックするため、DllImport と ASP.NET で問題が発生しています。ASP.NET にファイルのロックを強制的に解除させる方法はありますか?