- PR -

C#で作成したCOMを、ウィジェットから呼び出したい

1
投稿者投稿内容
しんじ
会議室デビュー日: 2007/06/01
投稿数: 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

長文になってしまいましたが、よろしくお願い致します。
Kei
会議室デビュー日: 2006/06/20
投稿数: 1
投稿日時: 2008-10-20 14:28
だいぶ古い質問ですが、私も引っかかっていたのでコメントです。
Widget3で通らなかったものが4, 4.5 で通るようになったというレポートが私のものも含めて数件Yahoo Widget Workshopに上げられています。

今やってみると違う結果が得られるのでではないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)