問題タブ [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.
c++ - __declspec(dllimport) の未解決の外部シンボルを取得する条件は何ですか?
.dll を使用するようにアプリケーションを変換していますが、次のようなリンカー エラーが表示されます。
未解決の外部シンボル "__declspec(dllimport) public: void __thiscall Rail::SetNextrail(class Rail *)"
このエラー メッセージの最後には、さらに意味不明な内容があります。なぜこれが発生する必要があり、どのように修正しますか? __declspec(dllimport) は、次のように定義されたマクロで配置されています。
.net - CPU アーキテクチャに依存しない P/Invoke: DllName またはパスを「動的」にすることはできますか?
P/Invoke (DllImport) 署名によって参照される特定の DLL を CPU アーキテクチャに依存させる方法はありますか?
私は、サード パーティ ベンダーのネイティブ dll (この場合はハードウェアのユーザー空間インターフェイス DLL) から多数のメソッド シグネチャをロードするアプリケーションに取り組んでいます。そのベンダーは現在、x86 バージョンと x64 バージョンの両方の DLL の提供を開始しており、私のアプリは 64 ビット プロセスとして実行することでメリットが得られると思います。この 1 つの DLL を除いて、すべてが .NET コードであるため、「任意の CPU」としてビルドできます。
ネイティブ DLL のすべてのメソッド シグネチャは 64 ビットでも同じですが、DLL の名前が異なります (Foo.dll と Foo_x64.dll)。P/Invoke シグネチャまたは app.config エントリを使用して、実行中の CPU アーキテクチャに基づいてロードする DLL を選択する方法はありますか?
異なる DLL 名ではなく、異なるフォルダーで同じ名前だった場合、他のオプションが開きますか?
注: このユーザー空間 DLL のバージョンがハードウェア用にインストールされたカーネル ドライバーと一致することが不可欠であるため、DLL はアプリにバンドルされていませんが、代わりに、ベンダーのインストーラーに依存して %道%。
c++ - Delphi で DLL (C++ で記述) を使用できません: プロシージャ エントリ ポイントが見つかりませんでした
Visual Studio で DLL をコンパイルしました (ソース コードは C++ で書かれており、ほとんど理解できません)。Scraper.hの一部を次に示します。
今、私の Delphi アプリケーションで上記の関数を使用しようとしています:
プロジェクトがコンパイルされず、次のメッセージが表示されます:プロシージャ エントリ ポイント ScraperGetWinList could not be found in the dynamic link library: Scraper.dll .
私は何を間違っていますか?
c++ - Delphi: 外部 DLL から関数を呼び出した後のアクセス違反 (C++)
C++ で記述され、DLL としてコンパイルされた関数があり、これを Delphi アプリケーションで使用したいと考えています。
スクレイパー.cpp:
Scraper.h:
これは、Delphi アプリケーションで関数を宣言する方法です。
関数は機能しますが、終了すると、Debugger Fault Notification: Project ... faulted with message: ''access violation at 0x0012f773: write of address 0xffffffc0' を受け取ります。プロセスが停止しました。Step または Run を使用して続行します。
__stdcall
Scraper.cpp と Scraper.h に(の後に)を追加するSCRAPER_API bool
と、Delphi アプリケーションがまったく起動しません。プロシージャ エントリ ポイント ScraperGetWinList がダイナミック リンク ライブラリ Scraper.dll に見つかりませんでした。
c# - C# から Win32 を呼び出す簡単な方法はありますか?
数か月ごとに、C# から Win32 を呼び出す必要があることに気付きます。何十回もやったことがありますが、通常は正確な策略を忘れてしまうので、Web や古いコードを調べて、必要な DllImport ステートメントなどを見つけ出します。
私は一人ですか?
Win32 API全体に必要な宣言を持つ認可された「Win32」クラスはありますか? あるはずのようです。多分私は何かが足りない。
c# - DllC++ DLL を C# アプリにインポートします。BYTE * p
C++ DLL にエクスポートされた関数があります。
自分の C# アプリケーションで利用できるようにしたい
問題は、次のエラー メッセージが表示され続けることです。
タイプ 'System.NullReferenceException' の未処理の例外が Blarggg.dll で発生しました 追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
VS2008 を使用して、DLL と C# アプリケーションの両方をビルドしています。
私は C# プログラマーではありません。
私は何を間違っていますか?
c# - C# で数学入力パネルを作成しようとしています
C# で数学入力パネルを作成するにはどうすればよいですか?
私はそれをdllに入れて呼び出そうとしましたが、すぐに閉じます。
C# で dll 関数を呼び出すと、パネルがポップアップしますが、すぐに消えます。助言がありますか?
c# - アンマネージC++へのC#呼び出しは、正方形の記号の文字列を返します
アンマネージC++DLLを呼び出すC#コードがあります。私が呼び出しているメソッドは、文字列を参照として受け入れることを目的としています。これを処理するために、StringBuilderを渡します。それ以外の場合は、StackOverflowExceptionがあります。
これは正常に機能していますが、一部の呼び出しでは、アンマネージコードから返される文字列は、次のようなごちゃ混ぜの文字列です:øŸE〜。、Ê。これはエンコーディングと関係があるはずですが、以下に示すいくつかのことを試しましたが、何も機能しません。これは、他の誰かが同様のことをするために書いたVB.Netコードの問題ではありません。
私が試したことは次のとおりです。1。これを使用しています:[DllImport( "dmphnx32.dll")]が、すべての文字セットオプションを試しましたが成功しませんでした。
- Encoding.Default.GetBytes、Encoding.ASCII、Encoding.Unicode、およびその他を使用しようとしましたが、成功しませんでした。
私はC++の経験がないので、実際にヘルプを使用できます。
DLLIMportメソッドは次のとおりです。
C++コードは次のとおりです。
アンマネージコードを呼び出すC#コードは次のとおりです。
ありがとう、コーリー
c# - C#アプリケーションで使用するためのDllImportのパラメーター化
ハードウェアにアクセスするためのライブラリを提供するサプライヤがあります。残念ながら、複数のデバイスがある場合は、異なるdll名でライブラリを複数回インポートする必要があります。結果として、重複したコードが1メートルトンあり、まもなくメンテナンスの悪夢になるのではないかと心配しています。
現在私たちが持っているのは次のようなものです。
..。
...。
..。
CまたはC++を使用している場合は、関数を1つのファイルで定義し、静的クラスに複数回#includeします。これは、他の方法よりも優れていますが、C#ではそのオプションがありません。
必要な数の静的デバイスクラスを生成できるファクトリを効果的に定義する方法について誰かが賢いアイデアを持っているなら、私は非常に興味があります。
ありがとう、
編集:関数プロトタイプは非常に多様であるため、それらが同じであることに依存する方法は適切ではありません。これまでの提案に感謝しますが、私はそれほど多くのアイデアをそれほど迅速に説明していませんでした。
c# - レジストリ キーを読み取る
bin フォルダーから DLL をインポートする Web アプリケーションがあります。
今私がやりたいことは、最初に、現在のプロジェクトではなく、別の場所にあるフォルダーから DLL をインポートすることです。
そのフォルダーのパスは、レジストリ キーに格納されます。
どうすればいいですか?
編集:
なぜ私はこれを解決できないのですか?
string pathName = (string)registryKey.GetValue("BinDir");
ここでは機能していませんが、ページロードイベントで機能しています...
しかし、この DLL インポートを行うと機能しません... どうすれば修正できますか?