問題タブ [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.
.net - .Net で画面解像度を設定する
自分で p/invoke を行う必要がないように、画面解像度を設定できるマネージド ラッパーのライブラリがあるかどうか、誰かが知っていますか?
.net - .NET マーシャリング速度
次のような C++ メソッド シグネチャがあります。
内部と外部の両方のタイミング メソッドで関数をラップしました。内部的には、関数は 0.24 秒で実行されています。外部的には、関数は 2.8 秒で実行され、約 12 倍遅くなります。どうしたの?マーシャリングは私をそんなに遅くしていますか?もしそうなら、どうすればそれを回避できますか?安全でないコードに移動して、ポインターなどを使用する必要がありますか? 余分な時間のコストがどこから来ているのか、私はちょっと当惑しています。
c# - CeGetVolumeInfoへのPinvoke呼び出しには、不明な列挙値が必要です
私はまだPInvokeの呼び出しにかなり慣れていないので、誰かがこれを解決するのを手伝ってくれることを願っています。
C#プロジェクトからCeGetVolumeInfo()(CoreDll.dllに保持されている)への呼び出しをPInvokeしようとしています。 これがMSDNからのこの関数の定義です:
私の問題はCE_VOLUME_INFO_LEVEL
パラメータにあります。ある種の列挙型だと思いますが、実際の値がわかりません(MSDNは値情報を提供しません)。グーグルで検索してもほとんど何も表示されません。
PInvoke到達可能dllで定義された列挙型の不明な値を取得/使用する方法に関する提案はありますか?
ありがとう!
c# - P/Invoke 経由で cstring* をマーシャリングするにはどうすればよいですか?
C# からサードパーティの DLL を呼び出そうとしていますが、一部の文字列データのマーシャリングに問題があります。DLL は Clarion で作成されたもので、使用されているデータ型についてはよくわかりません。具体的には、仕様には、機能しない関数の次の署名があります。
cstring は null で終わる文字列であると想定していましたがout char[] version
、定義で動作させることができませんでした。これを処理する正しい方法を知っている人はいますか?
編集: 実際、これまでに発見したことは、Clarion の cstring が実際には null で終わる文字列であることを示唆しています。
更新: DLL ドキュメントにタイプミスがあることが判明したため、質問のタイトルと詳細を更新しました。問題のパラメーターは、 cstring ではなくtypeversion
として宣言されているように見えますが、明らかに c スタイルの null で終わる文字列です。したがって、マーシャリングはそれほど複雑ではないはずです。なぜなら、C 呼び出し規則で書かれていると彼らは主張しているからです。参照パラメーターを介して文字列を渡すクラリオン DLL を正常に p/invoke した人はいますか?cstring*
cstringt*. And in Clarion,
c# - Platform Invoke ステートメントでの DLL への相対パス
VS 2008 を使用して、P/Invoke で .dll を使用するアプリケーションを開発しています。絶対パスを使用すると、dll を正常に使用できます。たとえば、これは機能します。
[DllImport("C:\\myDLL.dll")] 内部静的 extern bool isReady();
これは動作しません:
[DllImport("myDLL.dll")] 内部静的 extern bool isReady();
参照フォルダーを追加して dll をプロジェクト フォルダーに追加しようとしましたが、どちらも機能しません。このアプリケーションを他のコンピューターに展開する必要があり、この .dll が含まれていることを確認する必要があります。助けてくれてありがとう!
そうしようとすると、次のエラーが発生することを忘れていました。
Microsoft Visual Studio 'C:\Users\dlugokja\Documents\Visual Studio 2008\Projects\DinamapN.sln(1)\DinamapN\DinamapN\DinaWin.dll' への参照を追加できませんでした。ファイルにアクセスできること、および有効なアセンブリまたは COM コンポーネントであることを確認してください。わかった
c# - アクティブなウィンドウ テキストを取得する (さらにテキストを送信する)
グローバルホットキーが押されたときにアクティブなテキストボックスにテキストを追加するC#で小さなユーティリティを作成しています。これはオートコンプリート機能の一種です。グローバルホットキーは機能していますが、現在のテキストをアクティブなテキストボックスに取得する方法がわかりません (アクティブなウィンドウがテキストボックスの場合)。
を。GetForegroundWindow を取得し、そのハンドルを使用して GetWindowText を呼び出します。これにより、テキストボックスの内容ではなく、アクティブなウィンドウのウィンドウタイトルが得られました。
b. GetActiveWindow を取得し、そのハンドルを使用して GetWindowText を呼び出します。それは私にテキストをまったく与えません。
これが私がやったことの例です
それで、これを達成する方法についてのアイデアはありますか?
編集 28.01.2009: それで、これを行う方法を見つけました。これは私が使用したものです:
これに関するいくつかのメモ。この例では、何かを実行する前に 5 秒間待機し、編集ウィンドウにフォーカスを移す機会を与えています。私の実際のアプリでは、これをトリガーするためにホットキーを使用していますが、それはこの例を混乱させるだけです. また、製品コードでは、win32 呼び出しの戻り値をチェックして、成功したかどうかを確認する必要があります。
.net - P/SHSetKnownFolderPath を呼び出す
編集: Scotty2012 と David Morton の回答がうまくいかないので、この質問に報奨金を出しました。文字列を渡す前に、文字列の型を別のものに変更する必要があると思います。
私は P/Invoke の警官ではなく、SHSetKnownFolderPathの宣言と呼び出しに苦労しています。私は VB9 を使用していますが、誰かが C# で答えを出したら、翻訳できるはずです。
SHGetKnowFolderPath が機能しています。これが私のコードです。
VB で
ありがとう!