- - PR -
C#でのVBA.Collectionの扱いについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-07-25 13:28
こんにちは、tougeと申します。 いつも勉強させて頂いております。 現在、VBA.Collectionのオブジェクトを含むCOMを使うアプリケーションを作成していますが、そのCollectionへのオブジェクトの追加方法が分かりません。 VisualBasicのヘルプ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vamthadd.asp を見ると、item , key , before , after の引数を持つAddメソッドで追加できるとあり、key、bifore、afterは省略可能とあります。 このaddメソッドで追加しようとした場合のkey以降の引数の省略方法が分かりません。 以下のようにコーディングしたところ -------- object ogc = (object)gc; ←追加するオブジェクト object key = null; object before = null; object after = null; vbacollection.Add(ref ogc,ref key ,ref before ,ref after); ↑VBA.Collectionのオブジェクト -------- コンパイルは通りますが、実行時に -------- 'System.Runtime.InteropServices.COMException'のハンドルされていない例外が発生 追加情報:HRESULTからの例外です:0x800A0005(CTL_E_ILLEGALFUNCTIONCALL) -------- のエラーが出てしまいます。 なお、オブジェクトブラウザでのAddメソッドの説明は、 -------- public abstract virtual void Add ( System.Object Item , System.Object Key , System.Object Before , System.Object After ) -------- となっています。 このエラーの回避方法についてご存知の方がいらっしゃいましたら、ご教授の方よろしくお願い致します。 |
|
投稿日時: 2003-07-25 17:40
下記サンプルではエラーになりませんでしたが...参考になりませんか?
Microsoft.VisualBasic.Collection col = new Microsoft.VisualBasic.Collection(); string str = "aaa"; col.Add(str, null, null, null); |
|
投稿日時: 2003-07-29 19:00
返信が遅れて申し訳ありません。
Collectionのクラスですが、オブジェクトブラウザで確認したところCOMオブジェクトで使われているのは Microsoft.VisualBasic.Collection ではなく、 VBA.Collection であることがわかりました。 リンク先のドキュメント(Collectionの)が誤っていたようですね。 混乱させて申し訳ありません。 Microsoft.VisualBasic.Collection の場合は、ご指摘頂いた方法でオブジェクトを登録できることは確認できましたが、やはり、VBA.Collectionの場合は実行時に上記の例外が発生します。 また、VBA.Collectionのオブジェクトをnewすると ---- System.Runtime.InteropServices.COMExceptionのハンドルされていない例外が発生しました。 追加情報:CLSID'{A4C4671C-499F-101B-BB78-00AA00383CBB}"のCOMオブジェクトは有効でないか 登録されていません。 ---- のエラーが発生します。 この辺りに原因があるのかもしれません。 COMオブジェクトの登録に関して調査してみます。 何かご存知でしたらよろしくお願い致します。 何も分かっていない素人で申し訳ありませんがお願い致します。 |
|
投稿日時: 2003-08-01 11:40
http://support.microsoft.com/?kbid=323737 に書かれていた方法(VisualBasicでVBA.Collection仲介クラス(COM)を作る)で試してみました。 最初は上記のページに書かれていた通り、 ---------------------------------------------------- ' Function to create a new object of VBA Collection Public Function CreateVBACollection() As Collection ' Define a variable of type Collection Dim col As Collection ' Create New Collection object Set col = New Collection ' Return new Collection Object Set CreateVBACollection = col End Function ---------------------------------------------------- のCOMを作りました。 これでVBA.Collectionのオブジェクトをnewすることはできたのですが、コレクションにオブジェクトを追加しようとすると、今までと同じ例外が発生していました。 そのため、VBA.Collection仲介クラス(COM)にVBA.Collectionへオブジェクトを追加するメソッド(下記)を追加したところ ---------------------------------------------------- ' Add Object Public Function AddObject(vbaObj As VBA.Collection, addObj As 【追加するオブジェクトのクラス】) vbaObj.Add addObj End Function ---------------------------------------------------- 成功しました。 何故C#ではMicrosoft.VisualBasic.CollectionとVBA.Collectionがあるのか、Microsoft.VisualBasic.CollectionはVisualBasicで作られたコレクションと互換性が無いのなら何の為に用意されているのか?また、コレクションに関するマイクロソフトのバクとは具体的に何なのか?修正パッチ等は出ていないのか?等の疑問点は残っていますが、 ★下記URL ★http://www.microsoft.com/japan/developer/library/vbcon98/vbconbrowsingobjectsfromotherapplications.htm ★では以下の表記がありました。 ★------ ★メモ [ライブラリ] ボックスには、Visual Basic (VB) と Visual Basic for ★Applications (VBA) に対する別々のエントリがあります。"Visual Basic が提 ★供するオブジェクト" という言い方をしますが、Collection オブジェクトは ★VBA によって提供されます。 ★------ なんとか問題は解決できました。 ご協力本当にありがとうございました。<(_ _)> |
1