問題タブ [com-interop]
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.
java - Java SWT interop with COM - putting a float[] into a Variant?
In my Java SWT application I'm hosting an 3rd party ActiveX control. I'm using OleClientSite to do this.
There are 2 easy little functions I want to call from Java. Here are the COM function definitions:
Easy, right? Here's my pretend code:
The problem is on the last line: how do I pass a float array to the 3rd party COM object? HELP!
.net - VS.Net のデバッガーで COM / Interop クラスのインスタンスを正しく検査していますか?
VisualStudioのデバッガーでCOM / Interopオブジェクトを適切に(正しいタイプで)表示できるかどうか、またその方法を知っている人はいますか? 私が得るのは、「悪」のSystem.__ComObject値だけです (タイプを正しく識別しているにもかかわらず)?
例えば:
c# - クロス ユーザー COM 相互運用
サードパーティのデータベースを使用しています。ホスト アプリケーションはデータベースを実行し、クライアント アプリケーションが COM 経由でサーバー アプリに接続できるようにします。Windows 2003 Server を実行しており、すべてのコードを C# で記述しています。
サーバーでは、UserA としてログインし、ホスト アプリケーションをローカルで起動して、作成したクライアント アプリを実行できます。これは正常に接続されます。
ユーザー A としてログインしたままホスト アプリを実行すると、リモート デスクトップ経由でユーザー B として同時にログインし、ユーザー B のログインからのみクライアント アプリを起動し、ユーザー A のデスクトップで実行中のホスト プロセスに接続することを期待します。接続できません。
COM アクセスを同じコンピューター上の複数のユーザー ログインで機能させるための秘訣はありますか?
ホストプロセスの複数のコピーを実行することはできません。または、明らかに実行します。
.net - レガスムなしのCOM相互運用
私は制限付きユーザーであり、Outlook 2003および2007でC#ライブラリを公開するOutlookマクロを作成する必要があります。
インストール時も含めて、管理者権限がまったくないため、RegAsmを実行できず、マネージドアドインを作成できません(おそらく)。
このシナリオでVBAから.Netコードを呼び出す方法はありますか、それとも他の解決策はありますか?
これは個人的な使用のみを目的としているため、醜いハックは完全に許容されます(機能する限り)
interop - IronPython の相互運用アセンブリを介して使用している VB6 COM オブジェクトを破棄するにはどうすればよいですか?
ここで見られるように、IronPython で .NET 相互運用機能アセンブリを使用してサード パーティの COM コンポーネントを使用しています: How can I use a VB6 COM 'reference' in IronPython?
この分野での私の経験は素晴らしいものでした.シームレスに機能するものの量に非常に感銘を受けました.1つのことを除いて.
サード パーティの COM コンポーネントは、Microsoft の DAO ライブラリ (バージョンは不明) を使用して、さらに別のサード パーティ アプリケーションによって作成されたデータベースを操作します。問題は、このデータベース ファイルがプログラムの実行中に再作成されることです。この COM オブジェクトを「初期化解除」したいと考えています。特に、自分のコード (COM コンポーネントの属性にアクセスしたり、そのメソッドを呼び出したりするコード) を実行すると、最初にルーチンを実行したときに問題なく動作します。ただし、次回、サード パーティの COM コンポーネントは、データベース (MSAccess 95 .mdb ファイル) が既に使用されていることを示すメッセージ ボックスを表示し、再試行するオプションを提供します。再試行を押すと確実に機能するため、主な問題はこのダイアログが表示されることです。
したがって、私の理論では、COM コンポーネントがデータベースへのハンドルをリークしており、呼び出す「クリーンアップ」メソッドが見つかりません。試してみましたが、うまくいきませ.Dispose()
んでした。
私の最後の手段は、COM オブジェクトを呼び出すコードを、std in/out を介してメイン プロセスと対話する別の IronPython プロセスにすることです。これは、COM オブジェクトが提供する役割が「このすべての情報を今すぐ提供する」ユース ケースに近いためです。継続的に必要な依存関係の代わりに。
私はそのシナリオを避けたいと思っています.COM(または実際には.NET)に慣れていないので、明らかな.Dispose
方法などが欠けていることを願っています。
FreeLibrary
クリーンな方法がない場合、ネイティブ コードで繰り返し呼び出しを行うのと同じように、プロセスからアセンブリを強制的にアンロードできますか? (コードがオブジェクトをもう使用しないことを保証するので、メモリ保護エラーにつながる参照の欠落を心配する必要はありません)
編集:
これを解決できなかったので、プロセス外の方法を使用し、子のバッチ プロセスがシャットダウンしたときにウィンドウをクリーンアップさせました。
c# - 従来のASPを介したCOM相互運用機能(配列をcomに渡す方法)
クラシックasp用のcomオブジェクトを作成する必要があります。これは、.netアセンブリを作成し、comと「相互運用」できるため、次のような.netアセンブリの作成に進みました。-
次に、私は通常のビルドを実行しました:gacutil&RegAsm
そして私の古典的なaspページで私はこれを持っていました:-
そして私はエラーを受け取ります:
エラータイプ:Microsoft VBScriptランタイム(0x800A0005)無効なプロシージャ呼び出しまたは引数:'追加'/eduservice/test.asp、25行目
しかし、配列を使用しないようにアセンブリを変更すると、すべて正常に機能し、アセンブリとの間で通常の文字列またはintをクラシックaspに送信することもできます。私はたくさんのことを読みましたが、同じエラーが発生します、
誰もが以前にこれを試し、成功しました、あなたの解決策を共有してください
ありがとう
c# - C# で相互運用オブジェクトを適切にクリーンアップする方法
これは、 c# で Excel 相互運用オブジェクトを適切にクリーンアップする方法 への質問の続き です。
要点は、Excel 名前空間内で連鎖呼び出し (例: ExcelObject.Foo.Bar() ) を一緒に使用すると、COM オブジェクトのガベージ コレクションが防止されることです。代わりに、使用する各 COM オブジェクトへの参照を明示的に作成し、Marhsal.ReleaseComObject() を使用してそれらを明示的に解放する必要があります。
連鎖呼び出し後に COM オブジェクトを解放しないという動作は、Excel COM オブジェクトのみに固有のものですか? COM オブジェクトが使用されているときにこの種のパターンを適用するのはやり過ぎですか?
visual-studio - 自動的に強力な名前を付ける COM Interop ラッパー
いくつかの COM ライブラリを参照している Visual Studio 2005 の C# プロジェクトがあります。ビルドすると、次のようなエラーがスローされます。
参照されたアセンブリ 'assemblyName' には厳密な名前がありません。
以前は Visual Studio 2003 で COM アセンブリを参照していましたが、Interop ラッパーに自動的に署名していました。私がしなければならなかったのは、設定「Wrapper Assembly Key File」を設定することだけでした。
Visual Studio 2005 で同様の設定を探してみましたが、見つかりませんでした。したがって、Visual Studio 2005 で COM Interops に厳密な名前を付け、上記のエラーを取り除く同等の方法があるかどうか疑問に思っていました。
.net - COM 相互運用機能を介して .NET オブジェクトで静的メソッドを呼び出すにはどうすればよいですか?
COM 相互運用機能を使用して、.NET オブジェクトで静的メソッドを呼び出すことはできますか?
私はラッパークラスを書くことができることを知っています。やりたくない場合はどうすればいいですか?
c# - log4net-COM相互運用機能を介して呼び出されたdllのロギング
COM相互運用機能を使用して別のアプリケーションから呼び出される.NETDLLを作成しました。log4netを使用したいのですが、他のアプリケーションから実行時にログファイルの場所を指定する必要があります。
私は常にWinFormsプロジェクトで可能な限り簡単な方法でlog4netを使用してきましたが、DLLプロジェクトにはapp.configがなく、呼び出し元のアプリケーションにもapp.configがないため(.NETでもありません)、 log4netがどのように機能するかについて少し調べて、.configファイルをまったく使用せずに設定しようとしました。
コンパイルする段階に到達し、log4netについての私の小さな理解にある程度準拠していますが、ログファイルには書き込まれません。
これが私がこれまでに持っているものです、誰かが私の明白なエラー/誤解を指摘することができますか、そうでなければ私のdllからログを記録するより良い方法を教えてくれますか?
ありがとう!