問題タブ [com]
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.
events - COM オブジェクトの VBScript ユーザーにイベント ハンドラーを公開する
次のような呼び出しを介してユーザーがアクセスできる COM オブジェクトがあるとします。
私ができるようにしたいのは、次のように、ユーザーがオブジェクトのイベント ハンドラーを指定できるようにすることです。
これは可能ですか?可能であれば、C++ のタイプ ライブラリ (具体的には BCB 2007) でこれを公開するにはどうすればよいですか?
c# - C# で IBM の PCOMM を使用するためのサンプル コード o as400 スクリーンスクレイパーを作成する
C# を使用して IBM as400 用のサンプル スクリーン スクレーパーを作成した人はいますか?
com - Windows Server 2008: COM エラー: 0x800706F7 - スタブが不正なデータを受信しました
Server 2008 を評価しています。C++ 実行可能ファイルでこのエラーが発生しています。MSDN でこのエラーを見たことがありますが、以前のいくつかの OS では修正プログラムが必要だったようです。他の誰かがこれを見ましたか?32 ビット OS と 64 ビット OS で同じ結果が得られます。
コードスニペット:
GroupDataArray VARIANT 引数は、DCAPICOM_GroupData 構造体エントリをラップする VARIANT の 1 次元 SAFEARRAY をラップします。
delphi - サードパーティのCOMオブジェクトと相互作用してインスタンス化するコードをどのように単体テストしますか?
現在、ユニットテストに全力で取り組むことを妨げている最大の問題の1つは、私が作成するコードの非常に大きな割合が、相互作用する傾向のあるさまざまなソースからのサードパーティのCOMオブジェクトに大きく依存していることです(I ' m必要に応じて、いくつかのヘルパーライブラリを使用してMicrosoft Office用のアドインを作成します)。
私はおそらくモックオブジェクトを使用する必要があることを知っていますが、この場合、どのように正確にそれを実行しますか?既存のオブジェクトへの参照を渡す必要がある場合は比較的簡単ですが、一部のルーチンは外部COMオブジェクト自体をインスタンス化し、場合によっては別のライブラリから他の外部COMオブジェクトに渡すことがあります。
ここでのベストプラクティスのアプローチは何ですか?テストコードがレジストリ内のCOM登録情報を一時的に変更して、テストされたコードが代わりにモックオブジェクトの1つをインスタンス化するようにする必要がありますか?変更されたタイプのライブラリユニットを注入する必要がありますか?他にどのようなアプローチがありますか?
Delphiの例やツールには特に感謝しますが、より一般的なアドバイスやより高レベルの説明にも同様に満足します。
ありがとう、
オリバー
.net - ネストされた配列を .NET から COM に公開する
を返す .NET (C#) のメソッドがありますstring[][]
。RegAsm または TlbExp (.NET 2.0 SDK から) を使用して、含まれているアセンブリの COM タイプ ライブラリを作成すると、次の警告が表示されます。
警告: ネストされた配列のマーシャリング サポートはありません。
この警告により、問題のメソッドは生成されたタイプ ライブラリにエクスポートされません。Variant を COM の戻り値の型として使用し、COM クライアント側で /etc をキャストする方法があると言われました。この特定のアセンブリでは、対象となるクライアント オーディエンスは VB6 です。しかし、これを .NET 側で実際に行うにはどうすればよいでしょうか。
注: 戻り値の型が Variant である既存のレガシー DLL (エクスポートされたタイプ ライブラリを含む) がありますが、この DLL (および .tlb) は .NET 以前のレガシー ツールを使用して生成されるため、それらを使用できません。
アセンブリが代わりに VB.NET で記述されていれば、まったく役に立ちますか?
c++ - BSTR を wchar_t[] に効率的にコピーするにはどうすればよいですか?
wchar__t オブジェクトにコピーするために変換したい BSTR オブジェクトがあります。注意が必要なのは、BSTR オブジェクトの長さが数キロバイトから数百キロバイトになる可能性があることです。データをコピーする効率的な方法はありますか? wchar_t 配列を宣言するだけで、保持する必要がある可能性のある最大のデータを常に割り当てることができることはわかっています。ただし、これは、数キロバイトしか必要としない可能性があるものに数百キロバイトのデータを割り当てることを意味します。助言がありますか?
.net-3.5 - WF でステート マシンまたはシーケンス ワークフローを使用する必要がありますか?
構成管理の責任の一環として、毎週実行する反復可能なビジネス プロセスがあります。プロセスは変わりません。変更の詳細を Excel にダウンロードし、スプレッドシートを開いてマクロに基づいて詳細をコピーし、議題テンプレートから Word 文書を作成し、Excel データで議題を更新し、Word 文書から PDF を作成します。それらを電子メールで送信します。
このプロセスは、シーケンス ワークフローで非常に簡単に表現できます。これまでのところ、Excel と Word の部分を自動的に処理する COM オートメーションを使用して実現しています。歯車のレンチは、「アジェンダの作成」と「送信」の間に人間のステップがあることです。そこでは、変更の詳細を確認し、それらに関する質問を作成して、アジェンダに追加します。現在、プロセスのこの部分を手動で実行している間、ワークフローを一時停止するための一時停止アクティビティがあります。
私の質問は、ワークフローを書き直して、ビジネス プロセスにおける人間とのやり取りのベスト プラクティスに従うステート マシンにする必要があるか、それともサスペンド アクティビティが妥当な解決策であるかということです。
c++ - COM 経由で Excel 2003 ワークシートのすべての改ページを反復処理する方法
COM 経由で特定の Excel 2003 ワークシートのすべての改ページの場所を取得しようとしています。これが私がやろうとしている種類の例です:
これにより、各水平改ページの行番号が に出力されることを期待していますpSheet
。私が抱えている問題はcount
、ワークシートの改ページの数を正しく示しているにもかかわらず、最初の改ページしか取得できないように見えることです。ループの 2 回目の実行で、呼び出しによってpHPageBreaks->GetItem(i)
例外がスローされ、エラー番号 0x8002000b、「無効なインデックス」が発生します。
コレクションを反復処理する列挙子を取得するために を使用しようとしてpHPageBreaks->Get_NewEnum()
も、 への呼び出しの直後に同じエラーで失敗しますGet_NewEnum()
。
解決策を探しましたが、これまでに見つけた最も近いものは http://support.microsoft.com/kb/210663/en-usです。印刷する範囲を少し超えたセルや、右下のセル (IV65536) など、改ページを超えてさまざまなセルをアクティブ化しようとしましたが、役に立ちませんでした。
Excel でシート内のすべての改ページの位置を返す方法を誰かが教えてくれたら、それは素晴らしいことです!
ありがとうございました。
@Joel: はい、ユーザー インターフェイスを表示してScreenUpdating
から true に設定しようとしましたが、同じ結果が得られました。pSheet->PrintArea
また、ワークシート全体への設定やコレクションpSheet->ResetAllPageBreaks()
を取得する前の呼び出しの組み合わせを試しましたがHPageBreaks
、どちらも役に立ちませんでした。
@Joel:pSheet->UsedRange
過去にスクロールする行を決定するために使用しましたが、Excel はすべての水平方向の区切りを超えてスクロールしますが、2 番目の区切りにアクセスしようとすると、まだ同じ問題が発生します。残念ながら、Excel 2007 に切り替えても効果はありませんでした。
c# - commctrl コマンドを C# に移植する支援
C++ アプリでは、サード パーティのプロセスで実行されているウィンドウを指す hWnd があります。このウィンドウには、COM TreeView コントロールを拡張するコントロールが含まれています。このコントロールの CheckState を取得することに興味があります。
hWnd を使用して、commctrl.h から TreeView_GetRoot(hwnd) を使用して HTREEITEM を取得します。
hwnd はウィンドウを指し、hItem は TreeView_GetRoot(hwnd) からの戻り値です。それらは次のように使用されます。
このコードを、同じことを行う C# アプリに移植しようとしています (TreeView コントロールの CheckState をオフにします)。私は COM を使ったことがなく、まったくなじみがありません。
.NET mscomctl を使用してみましたが、TreeView_GetRoot または TreeView_GetCheckState に相当するメソッドが見つかりません。私は完全に立ち往生しており、C#でこのコードを再作成する方法がわかりません:(
提案?
com - COINIT_SPEED_OVER_MEMORY は何をしますか?
を呼び出すときCoInitializeEx
に、 に次の値を指定できますdwCoInit
。
挑発的なタイトルの「メモリに対する速度」の値は何をしますか? 最近の COM では無視されますか?