問題タブ [dllimport]
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.
asp.net - ASP.NET 2.0 アプリは IIS 5 分離モードの Win 2003 で実行されますが、(既定の) IIS 6 モードでは実行されません
アプリは DLLImport を使用して、従来の管理されていない dll を呼び出します。この質問のために、この dll を Unmanaged.dll と呼びましょう。Unmanaged.dll は、他の 5 つのレガシー DLL に依存しています。従来の dll はすべて、ASP.NET アプリケーションの WebApp/bin/ ディレクトリに配置されています。
IIS が 5.0 分離モードで実行されている場合、アプリは正常に動作します。従来の dll への呼び出しはエラーなしで処理されます。
IIS が既定の 6.0 モードで実行されている場合、アプリは Unmanaged.dll (InitMe()) を開始できますが、後でそれを呼び出すと終了します (ProcessString())。
ここで髪を引っ張っています。管理されていない dll をさまざまな場所に移動し、あらゆる種類のセキュリティ設定を試し、解決策を長い間懸命に探しました。ヘルプ!
サンプルコード:
アップデート:
ミニダンプから取得したスタックで戻ります。スタックオーバーフローのようですが、誰かが私を助けてくれるならもっと知りたいです. sos.dll が読み込まれた WinDbg の "kb" の結果:
c# - DLLImport Int** - 可能な場合の方法
メソッドのパラメーターの 1 つとして int** を必要とするサード パーティの DLL を使用しようとしています。パラメータは、メモリ割り当てを指すポインタのアドレスとして記述されます。
混乱して申し訳ありません。パラメータは双方向だと思います。DLL は FPGA ボードと対話するためのもので、メソッドはホスト PC と PCI ボード間の DMA 転送をセットアップすることです。
c# - C# から FORTRAN DLL を呼び出す保護されたメモリ違反
FORTRAN コードからコンパイルされたレガシー dll を呼び出そうとしています。私は Interop を初めて使用しますが、それに関する記事をいくつか読んだことがあり、私の場合はかなり簡単なようです。
本当に呼び出したいメソッドには複雑なメソッド シグネチャがありますが、この単純な GetVersion メソッドを呼び出すことさえできず、保護されたメモリ違反が発生します。
ここに私の DllImport コードがあります:
FORTRAN コードは次のとおりです。
失敗した単体テストは次のとおりです。
エラーメッセージは次のとおりです。
私が試した他のこと:
- デフォルトのマーシャリングの使用
- 文字列の代わりに char[] を渡す (代わりにメソッド シグネチャ エラーを取得する)
.net - DLLImport はアンマネージ DLL をどこで検索しますか?
簡単な質問: .Net で DLLImport 属性を宣言するとき、ランタイムはその DLL 依存関係を解決するためにどこを見ますか? DLL とそのすべての依存関係を bin フォルダーにダンプする必要がありますか?
dll - dllimport は、DLL が PATH にあるにもかかわらず、dll を見つけることができませんでした
[Dllimport("DllName.dll")] を使用すると、dll へのパスがプロセスの PATH 環境変数に存在することが確実な場合でも、「DllName.dll が見つかりませんでした」というメッセージが表示されます。
c# - const char* API を C# にインポートするには?
この C API 宣言が与えられた場合、どのように C# にインポートされるでしょうか?
私はこれまでに得ることができました:
c# - pinvoke: dllimport とインポートされたライブラリの操作方法が不明
C++ dll で dllImport を実行しており、次の署名があります。これまでのところ StackOverflow は非常に役に立ちました。
心配すべき落とし穴はありますか? dllimport を使用するのはこれが初めてです。
以下を C# にインポートする必要があります。
HANDLE FooInit(char* name); //name は "COM1" のような文字列のようです
int Foo1(HANDLE ハンドル, const char** センテンス); //文は "Hello World" のような文字列のように見えます
int Foo2(HANDLE ハンドル、DWORD* val);
どうもありがとう!
c# - void * C API を C# にインポートする方法は?
この C API 宣言が与えられた場合、どのように C# にインポートされるでしょうか?
私はこれまでに得ることができました:
当然、C# では "void *" はコンパイルされません。
一部のグーグルは、「オブジェクト」として翻訳する必要があることを示しています。それはうまくいくようです。しかし、他の人は、「Void * は、C/C++ 用語では関数ポインターと呼ばれ、C# 用語ではデリゲートである」と示しています。ここではあまり意味がありません。何に委任するのでしょうか? Google で見つけた他の API の同様の呼び出しでは、それぞれの API で他の関数を使用しています。しかし、この API では、他の呼び出しは意味がありません。
呼び出しのドキュメントには、次の例が示されています。
これは、静的な値でも渡すことができることを示しているようです。
void * の代わりに object でコンパイルされます。これが正しいかどうかはわかりませんし、テストする機会もありません (ライセンスの問題)。