ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« DinopSearchBar 検索エンジンリスト | メイン | VC++でのXPCOM作成(その1) »

VC++でのXPCOM作成(その3)




はじめに

 Firefox(Mozilla)などの機能をC++によって拡張することができるXPCOMの作り方を紹介する。 ここでは作成したXPCOMのインストールとテスト方法方法についてを記す。



インストール用パッケージの作成

 Firefoxにはxpiという形式での拡張のインストール方法が用意されている。このxpiというのはzipの 拡張子をxpiに変更しただけのもので、ファイル圧縮ソフトで作成することができる。

 以下の内容でzipファイルを作成し、ファイル名を「xxx.xpi」に変更する。

install.rdf
components\Ixxx.idl
components\Ixxx.xpt
components\Ixxx.dll
chrome\xxx.jar

 この中で「Ixxx.idl」、「Ixxx.xpt」、「Ixxx.dll」は前項で作成したXPCOMのコンポーネントになる。
 「install.rdf」の内容については後述する。

 xxx.xpiの中にあるxxx.jarというのもxpiファイルと同じでzipファイルの拡張子を変更したものになる。
 以下の内容でzipファイルを作成し、ファイル名を「xxx.jar」に変更する。圧縮内容の2つのファイルの 内容については後述する。

content\xxx\contents.rdf
content\xxx\xxx.xul



xpiのインストール

 Firefoxのウインドウの中にxxx.xpiをドラッグ・アンド・ドロップする。するとインス トールを問うダイアログが表示される。ここからインストールして一度Firefoxを終了すれ ばいい。



実行テスト

 インストールしたXPCOMおよびエクステンションをテストするにはアドレス欄から以下の URLを開く。

chrome://xxx/content/xxx.xul

 正常にインストールされている場合、このURLを開くとボタンが2つ表示される。このボタ ンを押すとインストールしたXPCOMが実行され「15」や「5abcdefg」というメッセージが表示 される。



install.rdfの作成

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
			xmlns:em="http://www.mozilla.org/2004/em-rdf#">

<rdf:Description rdf:about="urn:mozilla:install-manifest">
	<em:id>{503B265E-04B9-49fd-AD47-B477294302D9}</em:id>
	<em:homepageURL>http://www.dinop.com/vc/</em:homepageURL>
	<em:creator>issei</em:creator>

	<em:name>Ixxx</em:name>
	<em:version>1.0</em:version>
	<em:description>VC++ XPCOM Ixxx</em:description>

	<em:targetApplication>
		<rdf:Description>
			<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
			<em:minVersion>1.0</em:minVersion>
			<em:maxVersion>1.0+</em:maxVersion>
		</rdf:Description>
	</em:targetApplication>

	<em:file>
		<rdf:Description rdf:about="urn:mozilla:extension:file:xxx.jar">
			<em:package>content/xxx/</em:package>
		</rdf:Description>
	</em:file>
</rdf:Description>
</rdf:RDF>

※太字で強調している部分はVC++に含まれるGuidGen.exeを使って新しいGUIDを生成して利用 する。同じ値を使いまわしてはいけない!



contents.rdfの作成

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
			xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

	<rdf:Seq rdf:about="urn:mozilla:package:root">
		<rdf:li rdf:resource="urn:mozilla:package:xxx"/>
	</rdf:Seq>

	<rdf:Description rdf:about="urn:mozilla:package:xxx"
		chrome:extension="true"
		chrome:author="issei"
		chrome:authorURL="mailto:dinopcom@gmail.com"

		chrome:displayName="Ixxx 1.0"
		chrome:name="Ixxx"
		chrome:description="VC++ XPCOM">
	</rdf:Description>
</rdf:RDF>



xxx.xulの作成

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/" ?>
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script type="application/x-javascript">
<![CDATA[

function OnTest1()
{
	var obj = Components.classes["@mydomain.com/xxxxxxx/Ixxx;1"].createInstance(Components.interfaces.Ixxx);
	var	ss = obj.Add(11,5);
	alert(ss);
}

function OnTest2()
{
	var obj = Components.classes["@mydomain.com/xxxxxxx/Ixxx;1"].createInstance(Components.interfaces.Ixxx);
	var	ss = obj.AddString("abcdefg",5);
	alert(ss);
}

]]>
</script>

<vbox>
	<hbox>
		<button label="Test1" oncommand="OnTest1();" />
		<button label="Test2" oncommand="OnTest2();" />
	</hbox>
</vbox>

</page>








Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報