問題タブ [dll]
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# - Settings.Default。永続ストレージ(XMLファイル)の値ではなく、常にデフォルト値を返します
最近、IPアドレスを必要とするクラスを含むDLLをC#(.Net 2.0)で作成しました。私の同僚は、「。dll.config」(XML)ファイルからIPを取得するようにクラスを変更しました。これは、彼が作成した「アプリケーション設定」ファイル(Settings1.settings)によって自動的に生成されるようです。これの利点は、エンドユーザーがXML/configファイルのIPアドレスを自由に変更できるようにすることでした。
残念ながら、彼のコードをツリーからチェックアウトしてこの新しいコードをコンパイル(または使用)しようとすると、このDLLを呼び出すアプリケーションは、ファイルからの値ではなく、デフォルト値のみを取得します。
構成ファイルを呼び出すコンストラクターは次のようになります。
ユーザーが言ったMSDNフォーラムでこの問題への参照を見つけました:
「古い」値(開発時に定義した値)はハードコーディングされています。franeworkが構成ファイルにアクセスまたは開くことができない場合は、代わりにデフォルトが使用されます。これは、dllの設定を使用する場合に常に発生します。
これは、DLLの外部値を構成ファイルに保存できないことを意味しますか?(私の同僚はどういうわけかこの仕事をしました...)
フレームワークが構成ファイルにアクセスまたは開くことができないように見えるので、なぜ失敗するのかを理解するにはどうすればよいですか?または、これがいつ発生するかを検出しますか?
デッカー:それは少し役立ちます。残念ながら、私はこのDLLを仕様に書き込んでいるため、実際にはアプリケーションの構成ファイルにアクセスできません。上記のように、私の同僚は「設定1.settings」ファイルを作成しました。当時は理解できませんでしたが、「1」を追加すると、それを呼び出すアプリケーションの設定スペースから外れるようになりました。
私が理解しようとしているのは、DLLが同じディレクトリの隣にある構成ファイルを見つけられない理由だと思います。コードを段階的にトレースしても、何もわかりません。
余談ですが、アセンブリの「出力タイプ」を「クラスライブラリ」から「Windowsアプリケーション」に変更し、DLLコードの先頭に次の行を追加できます。
これを実行すると、別の構成ファイル( ".exe.config")が生成され、そのファイルを変更して、ファイルから新しいデータを取得することができます。だから私は少し混乱しています。何か案は?
delphi - Delphi DLL をテストすると VB6 IDE がクラッシュする
私は、Delphi で DLL を作成することに初めて取り組みました。ここまでは順調ですね。typelib を使用することで、Widestrings を DLL との間で問題なく受け渡すことができました。
現時点で興味深いのは、VB6 をテストベッドとして使用していて、IDE 内でテストを実行するたびに、プログラムが実行され、IDE プロセスが突然メモリから消えてしまうことです。エラー メッセージも何も表示されません。コードをステップ実行すると、最後の行を実行するまですべてが正常に機能し、その後 IDE が消えます。
対照的に、テストを EXE にコンパイルすると、プログラムは最後まで実行され、エラー メッセージなどは表示されません。
誰かが以前にこの問題を抱えていましたか?私を見つめている明らかな解決策はありますか?
重要な場合に備えて、以下のソースコード:
- 事業
- 単位
-- タイプライブラリ
WideString の宣言を、それを宣言した関数の外側に移動しました。これにより、変数の有効期間が関数の有効期間よりも長くなることが期待されfoo
ます。それは何の違いもありませんでした。
foo
同様に、関数の呼び出しを VB6 からコメントアウトしました。それも違いはありませんでした。何をしても、コードの最後の行が実行された後に VB6 IDE が停止します。
ローカル変数へのポインタ以外に原因があります。しかし、何?
dll - COM DLL と Typelib を使用した標準 DLL のどちらが「優れていますか?」
定性的な質問なので、「より良い」を引用符で囲みます。私は数年前から COM DLL を作成しており、Typelib の概念を備えた標準 DLL に出会ったのはつい最近のことです。
Are there any compelling reasons to use COM DLLs instead of DLL+Typelib? Granted, you can't do DCOM with a DLL+Typelib, but is that the only reason?
EDIT I've written COM DLLs in Visual C/C++ 6, Compaq Visual Fortran, Delphi, Visual BASIC 6, ActiveState Perl and a few others. I've written standard DLLs in Visual C/C++ 6, Delphi, Ada and a few others. I've written typelibs for some of my own standard DLLs and also for third party DLLs. The question was originally written in the context of a Delphi DLL+Typelib reimplementation of a VB6 original.
com - DLL からエクスポートされたメソッドを一覧表示するツールはありますか?
質問にあるように、管理されていない DLL がエクスポートするメソッドを一覧表示する優れたツールはありますか? COM メソッドとインターフェイスも一覧表示したいと思います。
com - InstallShield: Darwin 記述子
インストーラーで COM 情報を更新したにもかかわらず、InstallShield インストーラーがいくつかの COM DLL を正しく登録していないようです。インストール後に regsvr32 を手動で実行すると、すべて問題ありません。
インストール後、ランダムに見える文字列を含むコンポーネントのレジストリに InprocServer32 値があることに気付きました。これは、Darwin 記述子であると考えられます。存在する場合、クリアテキスト パスの場所を上書きすることを理解しています。regsvr32 を手動で実行すると、これらの Darwin 記述子が消えます。私の現在の仮説では、これらの記述子にエンコードされた情報が正しくないため、プログラムが COM コンポーネントをインスタンス化しようとすると、DLL へのクリアテキスト パスが正しい場合でも、正しくない Darwin 記述子情報を使用して失敗します。
これが事実であるかどうかを確認する方法、これらの記述子をデコードする方法、InstallShield が Darwin Descriptor を生成するのを停止する方法、またはインストーラーを修正する方法について、誰かが光を当てることはできますか?
c++ - ClickOnce: ユーザーのマシンで MSVCRT C++ DLL を取得する
私は自分のアプリケーション (15 個の C# dll と C++ ランタイム DLL の依存関係を持つ 1 個の C++/CLI dll) を ClickOnce でデプロイするために必死に試みてきました。Release フォルダーをコピーするだけで動作するようになりましたが、ClickOnce はファイル (msvcm80.dll、msvcp80.dll、および msvcr80.dll) のコピーを拒否し、このフォルダーに展開します。
この厄介な回避策を実行しました (msvcm80.dll、msvcp80.dll、および msvcr80.dll を Content/Copy If Newer として提供し、起動時に Microsoft.VC80.CRT フォルダーを作成し、それらの DLL をコピーして、Microsoft.VC80.CRT を作成します。マニフェスト) は機能しているように見えますが、これはすべて私には間違っていると感じています。
何か不足していますか?
c++ - msvcr80.dllがありません
C ++ランタイムmsvcr80.dllがコンパイル済みライブラリにない場合、ライブラリの作成に使用されたバージョンを判別する方法、またはライブラリを新しいバージョンのmsvcr80.dllで実行する方法はありますか?
dll - Visual Studio 2005 にインストールされているバージョンより古い .dll バージョンへのリンク
大量の背景情報で申し訳ありませんが、これはかなり具体的な質問です。
.dll ファイルを作成する Visual Studio 2005 プロジェクトがあります。このプロジェクトは、BigCorp のソフトウェアと共にインストールされる別の会社 "BigCorp" の .dll に依存しています。
理想的には、私が作成する dll は、BigCorp の dll の (下位互換性のある) どのバージョンでも使用できる必要があります。つまり、バージョン 4.3.2.100 にリンクすると、.dll がバージョン 4.3.3.20 になるようにユーザーが BigCorp のアプリをアップグレードしても、私のプログラムは動作するはずです。
これは、プロジェクトの参照を見て、.dll を選択し、「特定のバージョン」プロパティが false であることを確認することにより、VS2005 で十分に簡単です。
私の実際の質問:プロジェクトをビルドしているマシンにインストールされているバージョンよりも古い.dll のベース バージョンを指定することは可能ですか? 前の例を続けると、私のビルド マシンにはバージョン 4.3.3.20 がインストールされていますが、生成される .dll が、アップグレードされていないインストールと互換性があり、バージョン 4.3.2.100 のみがインストールされている必要があります。
VS は .dll へのパスを解決し、見つかったファイルに基づいてランタイム バージョンを検出するようです。.vbproj または .csproj でバージョン番号を直接指定して上書きしようとしています。つまり、
効果はありません。古いバージョンのコンピューターにアセンブリを登録しようとすると、BigCorp の .dll の新しいバージョンを見つけようとするため、古き良き「ファイルまたはアセンブリを読み込めませんでした」というエラーが表示されて失敗します。
私がやりたいことは可能ですか?
windows - dll メソッドの呼び出しをインターセプトする方法は?
dll メソッドの呼び出しをインターセプトする方法は?
- そのために利用できるテクニックは何ですか?
- C/C++だけでできますか?
- 実行中のすべてのプロセスから特定の dll へのメソッド呼び出しをインターセプトする方法は?
- 特定のプロセスから特定の dll へのメソッド呼び出しをインターセプトする方法は?
python - py2exeビルドにPYD/DLLを含める
私のアプリのモジュールの1つは、.pydファイルの関数を使用しています。dll(exclude_dlls)を除外するオプションがありますが、それらを含めるためのオプションはありますか?残りのファイル(.py)をコピーしているにもかかわらず、ビルドプロセスがモジュール内の.pydをコピーしていないようです。また、.dllを含める必要があります。py2exeに.pydファイルと.dllファイルの両方を含めるにはどうすればよいですか?