- - PR -
C#で作成したCOMを、ウィジェットから呼び出したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-06-01 15:37
Visual Studioで作成したCOMライブラリ(C#で作成)を、 ウィジェットから使用するアプリケーションを考えています。 ウィジェットエンジンは、Yahooのものを使っており、 こちらでの投稿はどうかとも思いましたが、何かヒントが頂ければとおもい、 投稿させて頂きました。 まず、簡単なテストプログラムを作成しました。 なお、COMライブラリは、Visual Studio 2005を使用して作成しました。 このテストプログラムは、ウィジェットを起動(ロード)したときに、 COMを叩いて文字列を取得し、その文字列の内容を表示するという、 きわめてシンプルなものです。 しかし、これが動作せずに困っています。 ウィジェットエンジンのデバッグウィンドウには、下記のように表示され、 該当するものは、関数ではない、と判断されてしまいます。 [UseCOM] TypeError: sampleCOM.teste1 is not a function (Global/onLoad:UseCOM.kon: Line 27) onLoad failed. Most likely an exception was encountered. では、COMライブラリの作り方がまずいのではないかと思い、 ウィジェットの代わりに、ExcelのVBAでも同じようなテストプログラムを作って確認したところ、動作するのです。 Yahooウィジェットエンジン用の特殊なCOMライブラリの作り方が必要なのか、 そのほかの問題があるのか、何かヒントをお持ちの方、ご教示よろしくお願い致します。 また、各サンプルのコードとCOM作成手順を掲載しておきます。 ========================【COMのソース Utils.cs】 using System; using System.Collections.Generic; using System.Text; namespace COMSampleE1 { public class Utils { public string teste1() { return "Method 1"; } public string teste2() { return "Method 2"; } } } ======================== ========================【ウィジェットのソース UseCOM.kon】 <?xml version = "1.0" encording = "UTF-8"?> <widget> <debug>on</debug> <window> <name>usecom</name> <title>Access to COM Component</title> <height>40</height> <width>2000</width> <visible>true</visible> </window> <text> <name>myText</name> <color>black</color> <size>24</size> <alignment>left</alignment> <vOffset>25</vOffset> <hOffset>2</hOffset> </text> <action trigger="onLoad"> function display() { var sampleCOM = COM.createObject("COMSampleE1.Utils"); myText.data = sampleCOM.teste1(); } display(); </action> </widget> ======================== ========================【ExcelのVBAソース】 Public Sub CommandButton1_Click() Dim hoge Set hoge = CreateObject("COMSampleE1.Utils") MsgBox hoge.teste1 Set hoge = Nothing End Sub ======================== なお、COMライブラリは、VS2005で「COMSampleE1.sln」という プロジェクトを使って作成しております。 COMライブラリの作成(登録)手順としましては、 1.Visual Studioにおいて、プロジェクト―プロパティ―著名タブ内の、 アセンブリの著名にチェックを入れて、snkファイルを作成する 2.Visual Studioにおいて、プロジェクト―プロパティ―ビルドタブ内の、 COM相互運用機能の登録にチェックを入れる 3.Visual Studioにおいて、プロジェクト―プロパティ―アプリケーションタブ内の、 アセンブリ情報ボタンをクリックし、アセンブリをCOM参照可能にする、にチェック 4.ビルドの後、生成されたDLLをGlobal Assembly Cache に登録する gacutil /i COMSampleE1.dll 5.COM DLLとして登録。 regasm COMSampleE1.dll 長文になってしまいましたが、よろしくお願い致します。 |
|
投稿日時: 2008-10-20 14:28
だいぶ古い質問ですが、私も引っかかっていたのでコメントです。
Widget3で通らなかったものが4, 4.5 で通るようになったというレポートが私のものも含めて数件Yahoo Widget Workshopに上げられています。 今やってみると違う結果が得られるのでではないでしょうか。 |
1