問題タブ [com-server]
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.
excel - Excel 2007 UDF: 関数の説明、引数のヘルプを追加するには?
説明
COM サーバーでいくつかの Excel UDF を作成しています。fxを押したときに表示される標準のヘルプ (関数の挿入ダイアログ) を取得したいと思います。はい、カテゴリのドロップダウンに自分の COM サーバーが表示されていますが、
- また、Equals、GetHashCode、GetType、および ToString も表示されます (これらは Excel ユーザーに公開するのはかなり望ましくありません)。
- COM サーバーを選択すると、*Function Arguments*[1] ダイアログが表示され、引数情報も関数の説明もありません。
これが私が得る不自由です:
関数の挿入ダイアログ http://www.iwebthereforeiam.com/files/Insert%20function%20dialog.gif
Excel 関数の引数ダイアログ http://www.iwebthereforeiam.com/files/Function%20Arguments%20dialog.gif
質問
これを Excel に渡すためにメソッドに設定できる .NET 属性はありますか?
- 機能の説明を提供できますか?
- パラメータの説明を提供できますか?
- 関数にカテゴリ名を付けて、ProgID よりも優れたものを取得できますか?
(ExcelDNA で実行するのは悲しいことに簡単に見えますが、私はその道をたどりません。govert のコード [カスタム属性、ある種のローダーなど] をエミュレートするのはかなり難しいようです。)
追加の背景
以前に Excel + COM サーバーを使用したことがない場合は、速度を上げるために役立つリソースがいくつかあります。
以前の StackOverflow の質問:
VB.NET で記述された COM Server for Excel をインストールしてオートメーション サーバー リストに登録するにはどうすればよいですか?
COM 公開 .NET プロジェクトを VB6 (または VBA) 参照ダイアログに追加する方法
その他のリソース:
.NET で Excel 用のユーザー定義関数を作成
する .NET COM アセンブリをビルドおよびデプロイする
C# でカスタム Excel ワークシート関数を作成する
編集 2009-10-20 14:10
を呼び出してみApplication.MacroOptions
ましたSub New()
。
- Sub New() なし
準許容: 関数はカテゴリ ProgID にリストされています。 - Shared Sub New()
受け入れられません: ビルド時のエラーです。/blockquote>
- Sub New()
受け入れられません: カテゴリは [関数の挿入] ダイアログに表示されません。
これは、MacroOptions と、Charles が推奨するより複雑なルートの両方に問題があると思われます。
編集 2009-10-20 14:55
良い面としては、実装するインターフェイスを作成するという Mike の推奨により、公開されていた迷惑な余分なメソッドが削除されました。
編集 2009-10-20 15:00
2007 年初頭のこの Microsoft の記事( Mike のリンク経由) は、このトピックに関するかなり完全な回答のようです。
オートメーション アドインと関数ウィザード
各オートメーション アドインには、Excel 関数ウィザードで独自のカテゴリがあります。カテゴリ名はアドインの ProgID です。オートメーション アドイン関数に別のカテゴリ名を指定することはできません。さらに、Function Wizard でオートメーション アドイン関数の関数の説明、引数の説明、またはヘルプを指定する方法はありません。
1ええと、StackOverFlow のバグです。明示的な HTML ul-list 内の文字列をイタリック体にできないようですか?
c++ - アウト プロセス COM サーバー - ファイルを作成できません
メインスレッドでアウトプロセス COM サーバーから次のコードを実行しようとしていますが、ファイルが作成されません。
誰かがこれがなぜなのか教えてくれるのだろうか?
winapi - COMサーバーのプロセスIDを取得します
HWNDに直接送信するWindowsメッセージと、自動化されたアプリケーションによって公開されるCOMサーバーへの呼び出しを組み合わせて自動化を行っています。
複数のインスタンスが実行されている場合は、COMサーバーのプロセスIDを判別できる必要があります。これにより、Windowsメッセージを送信するインスタンスと同じインスタンスをCOM呼び出しでヒットできるようになります。
実行中のすべてのCOMサーバーを実行中のオブジェクトテーブルで列挙し、それらすべてのモニカを取得できますが、COMオブジェクト自体は、ウィンドウハンドル、スレッドID、プロセスID、またはそのようなものを取得するために使用できるメソッドを公開していません。 。
モニカまたはモニカの実際のバインディングCOMオブジェクトに基づいて、COMサーバーのプロセスIDが何であるかを把握する方法はありますか?
ありがとう!
.net - .netでcomオブジェクトを解放せずにCOMサーバーを強制終了することに害はありますか?
皆さん-私は.netで多くのCOMサーバーを作成しています(私は多数のEXEを起動しています)、COM相互運用を介してCOMと通信している、サーバーで多数のCOMオブジェクトを使用しているなどです。プロセスを強制終了した場合、害はありますか?Marshal.FinalReleaseComObject()を介して使用したすべてのCOMオブジェクトを解放しないことについて何か悪いことはありますか?時間の経過とともにメモリリークが発生しますか?
windows - 複数のクライアントが接続された Windows Com Server はマルチスレッドですか?
次の方法で開始される com サーバーがあります。
私の質問は、複数のクライアントがこの COM サーバーに接続されている場合、要求 (com サーバーがホストしている com オブジェクトへの関数呼び出し) を同期的に処理しますか?
私が尋ねる理由は、次のシナリオのためです。 クライアント Aとクライアント Bの両方がCom Server Cに接続します。どちらもリクエストを発行し、このリクエストには COM オブジェクトを使用してデータベースから次のアイテム (私の場合は注文) を取得することが含まれます。2 つのクライアントが同じアイテムを持つことは許可されないため、基本的には、各アイテムがデータベースから取得されてクライアントに返されるときに取得済みとしてマークされます。
上記のシナリオで、 2 つのクライアントが同じ COM サーバーに接続している場合、競合状態を心配することなく、データベース内の項目を取得済みとしてマークするだけで十分ですか? リクエストが同期的に処理される場合、アイテムを取得済みとしてマークするだけで問題ないと思います。
c++ - tlibimp.exe の出力は OS によって異なります
tlibimp.exe (バージョン 11.0) を使用してサードパーティの .NET タイプ ライブラリ (COM サーバー DLL) をインポートしようとしています。これは基本的に問題なく動作しますが、Windows XP を実行しているコンピューターと Windows 7 を実行している別のコンピューターで実行すると、結果が異なります。さらに悪いことに、Win7 マシンで生成されたコードはコンパイルされません。
両方のマシンには次のものがあります。
- ボーランド C++ (RAD スタジオ) 2007
- tlibimp.exe バージョン 11.0
- 同じバージョンの .NET フレームワークがインストールされている (私の知る限り、Borland 2007 は .NET v2 を使用しています)
- bcc32.exe バージョン 5.93
コンパイラは OCX.h で次のように失敗します。
XP マシンでの関連するコード行 (正常にコンパイルされる) は次のとおりです。
Win7 マシン (失敗) の同じ行は次のとおりです。
この違いがどこから来るのか、今ではよくわかりません。何か案は?
乾杯ヘンドリック
ruby - Ruby で COM サーバーを作成しますか?
Windows 上の Ruby には win32::ole ライブラリがあり、VBScript やその他のスクリプト言語 (win32 バインディングを使用する Python、Perl など) と同様に、Ruby を COM クライアントとして機能させることができます。ただ、他のクライアントからもアクセスできるCOMサーバーをRubyで作れないかと思っています。Python は win32 パッケージを使用してこれを可能にし、さらに簡単にしますが、Ruby での例を見つけることができませんでした。
c++ - IContextMenu :: QueryContextMenuが呼び出されますが、IContextMenu::InvokeCommandは呼び出されません
IContextMenu
私のCOMサーバーの実装では、QueryContextMenu
は呼び出されます(ロギングで確認できます)が、呼び出されInvokeCommand
ません。これがQueryContextMenu
:
理由は何ですか?
visual-c++ - CANoe COM サーバー インターフェイスでサブオブジェクトにアクセスする方法
COM サーバーに関して、大きくて理解しにくい問題が 1 つあります。クライアント アプリケーションを CANoe (Vector によるアプリケーション) に書き込もうとしています。彼らはCANoe.tlb、CANoe.h、およびCANoe_i.cppファイルを提供しましたが、#import経由でCANoe.tlbのみを使用しています。すべての例は Visual Basic であり、私は VC++ (コンソール アプリケーション) で記述しようとしています。問題は継承にあります。つまり、彼らが書いたヘルプでは、メイン オブジェクトは Application であり、すべてのメソッド、オブジェクト イベントなどへのアクセスは、このオブジェクトを介してのみ可能であると書かれています。Visual Basic の例もすべて単純です。つまり、次のようになります。
私は間違いを犯していると確信していますが、どこにあるのかわかりません。簡単に言えば、サブオブジェクトやそのメソッドなどにはアクセスできません。アプリケーションのメソッドにしかアクセスできません。たとえば、この方法で Measurement オブジェクトからメソッド Start を呼び出したいと思います: pApp->Measurement->Start() しかし、それは不可能です。
私のソースコード:
CANoe COM サーバー ファイルを添付します (無料のデモ バージョンから有効です): http://www.sendspace.com/file/5pgcou
PS COMサーバーの使用は私にとって初めてなので、最終的に愚かな間違いをして申し訳ありません。役立つ情報を探していましたが、この COM インターフェイスの使用に関する情報は見つかりませんでした。
events - ATL を使用してコンソール アプリケーションで COM イベントを処理する方法 - クライアントの中断
COMプログラミング初心者です。
大きな問題があります。COM サーバー経由で CANoe アプリケーションからのイベントを処理しようとしています。まず、ネイティブ C++ で実行しようとしましたが、結果はありませんでした。今、ATLを使って試しています。私は何か間違ったことをしていますが、何がわかりません。イベントが発生すると、クライアント アプリケーションは自身と CANoe をサスペンドします。クライアント アプリケーションを閉じると、CANoe は正常に動作します。したがって、クライアント アプリケーションが CANoe からのイベントを処理することはわかっていますが、それを提供することはできません。ソース コードのコードのコメント部分も使用されましたが、結果は同じでした。
OLE-COM オブジェクト ビューアからの測定オブジェクトとイベントの説明は次のとおりです。
CANoe.tlb を添付します: http://www.sendspace.com/file/j2zloj
ご清聴ありがとうございました。