問題タブ [com-object]
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# - インストールされている Microsoft Word Object Library の検出と動的ロード
ちょっとした裏話: Word を使用して、Word テンプレートと会社の Active Directory のデータに基づいて Outlook 署名を生成する小さなアプリケーションがあります。自分のコンピューターでコーディングしたときに「Microsoft Word 12.0 Object Library」を使用したため、Office 2007 を搭載したコンピューターでうまく機能します。
ただし、ネットワーク上には Office 2003 を使用するコンピューターがかなりの数あり、それらのコンピューターでは「Microsoft Word 12.0 Object Library」が見つからないため、左右に例外が発生します。
私の質問は次のとおりです。どのバージョンの Office がインストールされているか、つまりどのバージョンの "Microsoft Word Object Library" が利用可能かを検出し、その後それをロードするにはどうすればよいですか。私が使用している機能は、"Microsoft Word 12.0 オブジェクト ライブラリ" と "Microsoft Word 11.0 オブジェクト ライブラリ" の両方にあると確信しています。
誰かが興味を持っている場合に備えて、署名を生成するために使用されている現在のコードは次のとおりです。
どんな助けでも大歓迎です。上記のコードへの入力も歓迎します。Office Interop ライブラリに対してコーディングした経験がないので、別の方法でできることがあると確信しています。
よろしく、エギル。
vb.net - タイプ 'String' からタイプ 'String' への変換は無効です
VBA で記述された古い Excel アドインを VB .NET に移植中です。Excel アドインは、多数の外部 com オブジェクトと対話します。コードは次のようになります。
私がやろうとしているのは、COM オブジェクトから文字列を読み取り、それを durr で取得して、後でプログラムで使用することです。
その 2 行目により、上記の例外が発生します。CStr/CType でキャストしようとすると、同じ例外が発生します。Visual Studio のウォッチ ウィンドウは hurr.getString の型を「System.__ComObject」として報告しますが、VBA のウォッチ ウィンドウは型を「Variant/Object/String」として報告します。Microsoft.VisualBasic.Information.TypeName(hurr.getString) は、型が「文字列」であることを示しています。これを機能させるにはどうすればよいですか?
ありがとう!
powershell - Powershell で利用可能な COM オブジェクトを一覧表示する
現在、次のスクリプトを使用して、マシンで使用可能な COM オブジェクトを一覧表示しています。
別の Web サイトで、InProcServer32 キーの存在は、オブジェクトが 64 ビット互換であることの証拠であると読みました。
では、powershell を使用して、各 COM オブジェクトの InProcServer32 の存在をどのように判断できますか? それが32ビットか64ビットかを確立する正しい方法でさえある場合。
powershell - PowerShell、アドオンなしで IE を開く
アドオンのない新しい Com オブジェクトとして Internet Explorer を開きたいです。
$ie=New-Object -comobject InternetExplorer.Application
アドオンなしで Internet Explorer を起動するにはどうすればよいですか?
asp.net - ASP.NETクラスファイルでCOMオブジェクトを使用する方法
C#クラスでラップしようとしているCOMオブジェクトがあり、それを使用したい他のアプリケーションでより簡単に利用できるようにしています。
COMオブジェクトのインスタンスを作成する次のコードがあります。次に、リフレクションを使用して、ユーザーデータを取得するメソッドを呼び出します。このコードは、aspxページにある場合は正常に機能します。
ただし、実際のWebサイトからコードを抽象化するためにコードをクラスファイル(JD_API.cs)に移動すると、コードを機能させることができなくなります。たとえば、次のように宣言された静的メソッドがあります。
残念ながら、Serverオブジェクトは、デフォルトでWebアプリケーションに含まれている一部のASP.NETライブラリに制限されているため、上記のコードは使用できませんでした。したがって、この時点で、次のようなCOMオブジェクトのインスタンスを作成することにしました。
ただし、実行時に、「保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示していることがよくあります。 」というエラーが表示されます。
ここからどこへ行けばいいのかわからない。このCOMオブジェクトのインスタンスをWebアプリケーション自体の内部にないレイヤーに抽象化する方法についてのヘルプをいただければ幸いです。ありがとう!!
c# - PowerShellプロセスは、外部からロードされたDLLからタイプ/オブジェクトをどのように返しますか?
私は.NETとPowershellの初心者プログラマーです。
TerminalService属性をフェッチするためにDirectoryServicesとTSUserExLibを利用する小さなコンパイル済みの.NETDLLがあります。DLLには、「IADsTSUserEx」を返す静的関数が1つあります。DLLをテストしましたが、文字列を返すときに機能しますが、IADsTSUserExクラス\オブジェクトタイプをPowerShellに返すことはできますか?PowerShellから静的関数を実行すると、nullでさえも、何も返されません。次のコマンドを使って試してみました
DLLには、次のコードスニペットが含まれています。
matlab - MATLAB で COM オブジェクト (activex サーバー) からデータを読み取るにはどうすればよいですか?
シミュレーターを MATLAB に接続しようとしています。シミュレーター プログラムは、COM オブジェクト インターフェイスを公開します。
次のコマンドで COM オブジェクトに接続し、ほとんどのメソッドを実行できます。
Variant*
ただし、一部のメソッドでは、型を出力として渡す必要があります。
「invoke」メソッドで示されるメソッドの 1 つのシグネチャを次に示します。
いくつかの構文でこのメソッドを呼び出しましたが、どれも機能しません:
私が試した他の構文は次のとおりです。次のすべてに、、、、をuint16
使用uint32
しint8
ます。int16
int32
私もlibpointerを使用しました:
問題は、次の項目についてよくわからないことです。
- MATLAB の " Variant(Pointer) " の類似型は何ですか?
- MATLAB で変数を出力として COM メソッドに渡す方法は何ですか?
- COMオブジェクトメソッドの結果から値をMATLABのポインターとして取得することさえ可能ですか?
データが他のクライアントでどのように表示されるかを確認するために、同じ dll ファイルを Delphi にインポートしました。上記のメソッドのタイプ ライブラリのシグネチャは次のようになります。
はい、シーメンスはこのcomサーバー(prosim)のガイドを提供しており、そのようなドキュメントに基づいて、その方法のほとんどを接続して実行しました。しかし、I/o データを読み取るメソッドは機能していません。ドキュメントでは、メソッドのシグネチャは次のように指定されています: (VB の場合)
あなたのアプリケーションはどうですか、それは機能していましたか? 戻り引数としてバリアント ポインターが含まれていましたか? そのアプリケーションで同様の方法がありましたか?
ありがとうございました
c++ - C++ でマネージ COM オブジェクトを使用する
C++ で COM オブジェクトを使用する方法については、多くの詳細なチュートリアルに従いました。VS 2010 pro を使用しています。という新しいソリューションを作成しましたTestComInterop
。という名前の C# プロジェクトを作成しTestMath
ました。のオプションを選択して、表示できるようにしましたproperties->Assembly Information->Make assembly COM-visible
。次に、署名プロパティに移動し、呼び出されたアセンブリに署名しましたMyMathCom.snk
(パスワードなし)。次に、 を使用してGUID generator
2 つの GUID を作成しました。次に、このコードを私のプログラムに入れてコンパイルしました。(成功)
次に、コンソール アプリ用の C++ プロジェクトを作成しました。許可された MFC。
次に、Typelib
MFC クラスを追加しました。ドロップダウンボックスを使用して見つけることができTestMath<1.0>
、iClass1
. それを選択すると、ヘッダーファイルが作成されました
コンパイルされ、tlh
ファイルtli
が作成されました..成功..
最後のステップは、私のコードを実行することです。開いてTestComInterop.cpp
、これは私がそれを行う「標準的な」方法を見つけることができなかったということです。私はさまざまなことを試しましたが、何を入れるべきかわかりませんでした...これがそのための私のコードです
今、私はそれが私のコンソールに答えを貼り付けることを期待しています..しかし何もありません。また、メッセージボックスが表示されることを期待しています...何もありません。控えめに言っても、私は COM オブジェクトに関しては初心者です。これまでのところ、すべてのツールなどを使用してこれを作成することはそれほど難しくありません...しかし、私の人生では、これを機能させることはできません.
必要な場合に備えて、ここに私のファイルtlh
とtli
ファイルがあります。
c# - 場所から実行されるCOMオブジェクトの指定
私はこれに髪を引っ張ってきました。私が書いたC++OPOSドライバーがあります。私はC#で仮想ピンパッドを作成しました。それは機能し、すべてが良好です。
しかし、私に与えられた1つの要求は、C#ドライバーが呼び出し元のプログラムに存在している必要があるということです。これは、OPOSドライバーが存在する場所である必要があると予想していたため、理解するのに時間がかかりました。設定がおかしいと思わせてしまいます。
私はそれが曖昧であり、より多くの情報が必要であることを知っていますが、どこから始めればよいのか、この点であなたがどのような情報を手伝う必要があるのかわかりません。私は頻繁にチェックインし、質問に答えます....私はこの漠然としたことを嫌います..炎上しないでください:)私は必要なだけ編集します。
編集
これをうまく表現できなくてすみません。これを書いているとき、私はたくさんのことをしていました。自分で読み直して「NEWB!」と思っていました。ハ。
さて、ダウンして汚れています。問題はCOMドライバーに関するものではなく、C#仮想ピンパッドに関するものです。要約すると、C#仮想ピンパッドdllは、登録済みのUPOSドライバーと同じ場所ではなく、実行可能ファイルと同じ場所にある必要があるのはなぜですか?
それでそれについて詳しく説明します。ドライバーは動作します(私がそれを再び台無しにしない限り)。指摘されたように、それを使用するプログラムには登録する必要があります。それはすべて順調です。このUPOSドライバーに関連するすべての必要なファイルを同じフォルダーに配置します。ある時点で、UPOSドライバーに組み込まれたC ++仮想ピンパッドがありましたが、簡単にするために、COMで表示されるC#仮想ピンパッドを作成する方が迅速かつ簡単であると判断しました。そして、ほとんどの場合、それはそうでした。グラフィカルな変更を加えれば、VPP.dllを置き換えることができ、生活は良かったので、それは良かったです。次に、このドライバーセットをコンピューターにインストールしましたが、VPPを開こうとすると、クラッシュしました。必死でVPPのコピーを始めました。dllを別の場所に移動し、実行中のプログラムと同じ場所に配置すると、動作を開始することがわかりました。これは私が望むものではありません。他のドライバーと同じディレクトリに配置できるようにしたいと思います。(これは環境によって異なりますが、一般的には「ProgramFiles」フォルダにあります)これで、上記の要約された質問に戻ります。私のUPOSドライバーがCOM呼び出しを行うドライバーであることに気が遠くなります。インストールを実行すると、インストールの一部としてVPP.dllがProgram Filesフォルダーに配置され、regasmが実行されます(これは成功したことを示しています)。ですから、実行中のプログラムに関係しているのではないかと頭を悩ませています。ああ、それが一元化された場所にある必要があるもう1つの理由は、いくつかの異なるプログラム(正確には4つ)が異なる場所にインストールされていることです。そして、ヒューマンエラーは、VPP.dllを各コンピューターの潜在的に4つの場所にコピーする必要はありません。(最終的には約500になります)
明確にしたので(そして実際に質問しました。それについては申し訳ありませんが)、何か提案はありますか?
php - PHPcomオブジェクトが機能していないIISサーバーでレジストリを読み取る
次のスクリプトを使用して、IISのレジストリ値を読み取ろうとしています。
動作しません。「レジストリキーを開けません」と表示され続けます。これは権限の問題だと思いますが、よくわかりません。どうすればこれを機能させることができますか。
助けてくれてありがとう。