問題タブ [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.

0 投票する
2 に答える
4261 参照

windows-mobile - モバイルデバイスでActiveSync接続を検出する方法は?

WindowsCE5.0デバイスでCompactFramework3.5を使用して、ActiveSyncの接続を使用してデータを取得する必要があるアプリケーションを構築しています。

モバイルデバイスがクレードルにあり、アクティブな接続があるかどうかをどのように検出できますか?これに対する何らかのPInvokeの呼び出しはありますか?

0 投票する
6 に答える
24022 参照

c# - new IntPtr(0) 対 IntPtr.Zero

2 つのステートメントに違いはありますか。

myPtr 引数が ref によって呼び出された関数に送信される場合、最初の構文を優先する PInvoke を使用する多くのサンプルを見てきました。アプリケーションですべての新しい IntPtr(0) を IntPtr.Zero に置き換えると、何らかの損害が発生しますか?

0 投票する
5 に答える
18091 参照

c# - C ++ dllからC#P/Invokeへの関数のエクスポート

C#コードから呼び出したいC++dllを作成しました。1つの関数を呼び出すことはできますが、C#コードがdllを読み込もうとすると、もう1つの関数が例外をスローします。

ヘッダーは次のようになります。

これにより、エクスポートテーブルが少しわかりにくいdllが生成されます(名前フィールドでfoo = fooはどういう意味ですか?):

私のP/Invoke宣言は次のようになります。

Installの呼び出しは例外なく返されますが、PPPConnectを呼び出すと、MissingMethodExceptionが発生します-「PInvokeDLL'PPPManager.dll'にエントリポイント'PPPConnect'が見つかりません。」

Install関数宣言からexternおよびdeclspecディレクティブを削除しようとしました。これにより、エクスポートされる関数はPPPConnectだけになりますが、それでもPPPConnectを呼び出すことはできません。

また、序数でDllImportを実行してみました。これにより、名前で呼び出すのと同じ結果が得られます。Installは戻りますが、PPPConnectは「エントリポイント'#2'が見つかりません...」という例外をスローします。

相互運用ログは次のようになります。

これは私の専門分野から大きく外れているので、どんな提案や考えも歓迎します。

ありがとう、ポール

編集:このコードは機能することがわかりました。問題は、最新のdllがデバイスに伝播されないことでした。D'oh!

0 投票する
2 に答える
5146 参照

c# - 複数のモニターで画面全体の DeviceContext を取得する

C# を使用して、すべての上に (マウスで) 線を引く必要があります。P/Invoke を使用して、デスクトップ ウィンドウの Graphics オブジェクトを取得できます。

DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));

ただし、このグラフィックス オブジェクトを使用して描画したものはすべて、左側のモニターにのみ表示され、右側のモニターには何も表示されません。失敗でも何でもなく、表示されないだけです。

Graphics オブジェクトを作成すると、可視クリップ領域が 1680 x 1050 であることが示されます。これは、左のモニターの解像度です。左モニターのデバイスコンテキストのみを取得しているとしか思えません。両方 (または任意の数) のモニターのデバイス コンテキストを取得する方法はありますか?


EDIT 3/7/2009: 私が使用した修正に関する追加情報。

colthium が提供する修正プログラムを使用して、各モニターのグラフィック オブジェクトを作成するための次のコードと、グローバル マウス ポイントをグラフィック サーフェス上の有効なポイントに変換できるようにオフセットを格納する方法を考え出しました。

0 投票する
3 に答える
6251 参照

pinvoke - P / Invoke with [Out] StringBuilder / LPTSTRおよびマルチバイト文字:文字化けしたテキスト?


P / Invokeを使用して、アンマネージDLLから(とりわけ)文字列をフェッチしようとしていますが、何を試しても文字列が文字化けします。

私はネイティブのWindowsコーダーではないので、文字エンコードビットについてはよくわかりません。DLLは「マルチバイト文字セット」を使用するように設定されていますが、これは変更できません(他のプロジェクトが破損するため)。ラッパー関数を追加して、既存のクラスからデータを抽出しようとしています。問題の文字列は現在CStringとして存在し、マネージドStringBuilderに取得することを期待して、LPTSTRにコピーしようとしています。

これは私が正しいと信じていることです(私は明らかに無関係なビットを削除しました):




ヒントを本当に感謝します!ありがとう!!!

0 投票する
2 に答える
1129 参照

c# - Windows Mobile API 呼び出し - 成功したが、GetLastWin32Error がエラー コードを返す - 心配する必要はありますか?

私は PInvoke 呼び出しの初心者です。これは十分に単純な質問のように思えますが、喜びはありません。

複数の Windows Mobile API 呼び出しを連続して行っています (アプリが既に実行されているかどうかを検出し、再度アクティブ化するため)。すべてがうまく機能しますが、正常に機能しない場合に備えてログなどを入れたかったのです。

このコードを書いているときに、呼び出しが明らかに有効な結果を返し、有効な結果が後続の呼び出しで正常に使用されている場合でもエラー コードが表示されることがわかりました (それが有効であることを証明しています)。

たとえば、現在実行中のプロセスのスナップショットへのハンドルを返す CreateToolhelp32Snapshot を呼び出します。Marshal.GetLatWin32Error をすぐに呼び出すと、無効なハンドルを意味するエラー 6 が返されます。しかし、戻り値は他のメソッドへの後続の呼び出しによって正常に使用され、プロセス全体が機能します。呼び出しの直前に Marshal.GetLatWin32Error を呼び出すと 0 が返されるため、エラー 6 を設定するのは間違いなくこの特定の呼び出しです。

Process32First と Process32Next への呼び出しは同様の動作を示します。つまり、プロセス情報を喜んで提供しますが、エラー 6 を設定することがあります。私は (と思います) これが起こっていることを知っています。これは、各呼び出しの前後にすぐに Marshal.GetLatWin32Error を呼び出すためです。後。現在、私は常に成功した結果を取得しています(後続の呼び出しで機能するハンドル、またはブール値とプロセス情報がバッファに正常にコピーされた場合は int または true の場合は 1 にキャストされる値)。

じゃあ……気にする?それはすべて機能しています....残りのプロセスで正常に使用される結果が返された場合、どのエラーが設定されるか気にしますか? 私の腸は「はい」と言っています、確かにそうですか?いずれにせよ、明らかに成功した結果が返されたのにエラーコードも設定されている場合、すべてが問題ないかどうかを実際に知るにはどうすればよいでしょうか? 有用なエラー情報を返してくれない不安定なシステムをリリースすることについて悪夢を見ています........

アップデート

これは、興味のある人のために私が話していることを説明しようとする私の loggong コードの結果です。簡単に言うと、コードは自身の既に実行されているコピーをチェックし、次にクライアントの既に実行されているコピーをチェックし、見つかった場合はクライアントを再アクティブ化します。

コード 18 での失敗が最後のエントリに到達したことを示す Process32Next への最後の呼び出しを除いて、結果は常に true です。そして、ShowWindow がサポートされていないエラー 120 を引き起こしていることに気付いたので、その呼び出しを行います。

したがって、私の2つの実際の質問は次のとおりです。

成功したときにエラーが発生するのはなぜですか?
また、通話前と通話後のエラーが同じ場合、これが古いエラーなのか、同じエラーの 2 回目の発生なのかをどのように判断すればよいでしょうか?

0 投票する
1 に答える
248 参照

.net - 部分的に信頼できる.NETアプリケーションからタスクバーをフラッシュするにはどうすればよいですか?

タスクバーをフラッシュしたいのですが(たとえば、ここで説明します)、アプリケーションが実行されているセキュリティコンテキストでFlashWindowEx(またはその他のこと)をP/Invoke できません。

タスクバーを点滅させる別の方法はありますか?そうでない場合、ユーザーの注意を引くための私のオプションは何ですか?

0 投票する
1 に答える
404 参照

.net - MacでのMonoへの変換

私は.NET2.0で書かれたプロジェクトを持っています(とにかく、3.5の機能をあまり使用していません)。最近Macを入手し、そのプロジェクトをMonoに変換したいと思います。

問題は、このプロジェクトは、FreeImageなどのライブラリと私がこのプロジェクト用に作成したいくつかのC++ライブラリに依存していることです。私はMacでのプログラミングにまったく慣れていません。p / invoke呼び出しが失敗しないように、これらのライブラリをこのプロジェクトにリンクするにはどうすればよいですか?必要に応じてすべてのライブラリを再度コンパイルできるので、ライブラリをどの形式で配置する必要がありますか。また、使用する必要のある特定のツールはありますか?Visual Studio側でコーディングする場合、.NETコードと同じソリューションのプロジェクトとしてライブラリを使用していました。Macにも同様の設定がありますか?

0 投票する
1 に答える
1138 参照

c# - ログオンしているユーザーのアクティブ ウィンドウをサービスから取得する方法

アクティブなウィンドウや最後のマウスの動きなど、現在ログオンしているユーザーから情報を取得する必要がある C# サービスを作成しています。user32.dll を使用してこれらの情報を取得できることは既に学びましたが、これはメソッドを呼び出すユーザー コンテキスト内からのみ機能します。

このようにして、私のサービスはそれ自体に関する情報しか取得できず、「現実世界」のユーザーに関する情報は取得できませんでした。また、これは WTSEnumerateSessions、OpenWindowStation、EnumDesktops などを使用することで可能になるはずだと聞きましたが、これを行う方法を示す例は見つかりませんでした。

誰かが私の目標を達成する方法の手がかり (またはコード例) を持っていますか?