Internet Explorerを操作する為にMicrosoft.mshtml.dllを利用したプログラムを配布する際の問題。

開発環境か、Office用PIAをインストールしないと、Microsoft.mshtml.dllはインストールされない。従って、そのDLLを利用したプログラムを配布しても、利用したいPCにはインストールされていない可能性がある。
インストールされていないPCにMicrosoft.mshtml.dllをインストールするには、次のいずれかをインストールする必要がある。(上記2つは確認はとれていないが、おそらくOK)

ただし、上記3つはインストールするのに、対応するMicrosoft Officeがインストールされている必要があり、条件が厳しい。.NET Framework 2.0 SDKならOfficeは不要だが、482.6MB。ひどい。

その為、公開するアプリと一緒にMicrosoft.mshtml.dllを配布することを考えて調べてみた。けれども、配布できるファイルがredist.txtに書いてあり、Microsoft.mshtml.dllは配布できるファイルでは無いようだ。更に言えば、Microsoft.mshtml.dll単体をインストールするには、グローバル・アセンブリ・キャッシュ(GAC)に登録する必要があるが、難易度が高い(私はそこまで研究していないが)。

参考情報として、

結論として、私は、Microsoft.mshtml.dllの利用をあきらめた。代わりに、Type.InvokeMemberメソッドを利用して操作する方法に変更した。参照IE9をType.InvokeMemberで操作

このDLLを利用する必要に迫られたのは、IE8からIE9になり、IE9を操作するのに今までのコードでは操作できなくなったからだ。そのため、こうして相当な労力を費やして調査と実験とを繰り返しているのだ。なんで、HTMLを簡単に利用できるようになっていないのだろう。とは言っても仕方がないので、対応せざるを得ないんですけどね。

Visual Studio 2010がクラッシュするようになったので、その原因追及。

拡張機能の、VS10x Code Map v2が、原因のようだとまず判明。この拡張機能を有効にしている場合で、IntelliSense(インテリセンス)が実行される時に、クラッシュするようだ。
次に、何の設定が問題になっているのか、原因の切り分けに多大な時間を費やした。

コードの量を減らしたり、参照を減らしたりしたり、****.vbproj.vs10xを削除したりしたが、クラッシュするのは変わらず。
最終的に、ClickOnceセキュリティ設定を有効にするのチェックを外して、あれこれ作業している内に、この現象が再現しなくなった。再現しないので原因ははっきりしないのだが、今まで大変に不便だったので直って良かった。

はっちゅう君+ アドイン開発

クリック証券のはっちゅう君+で、アドイン開発が出来るというので、簡単に株の売買が出来るようにならないか一日試行錯誤した。
結論から言うと、株の売買はもちろん、株のデータを受信してそれを表示することも、アドインとして作成することは出来ないことが判った。株のデータ受信はなんとかしてしまうことも出来るようだが、ヘルプにはそうした機能の記載は無い。最初、当然出来るだろうと思って、探しまくったけれど見つからず、どこか見落としているんだろうと思っていた。

ヘルプの説明とサンプルはC#なので、VB.netにするのに結構つまづいた。その点を書いておく。

例えば、サンプルでは、こうなっている。

namespace HelloWorld
{
    public partial class Form1 : AddInForm
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

これを、http://www.developerfusion.com/tools/convert/csharp-to-vb/ を利用してVB.netに変換すると、

Namespace HelloWorld
	Public Partial Class Form1
		Inherits AddInForm
		Public Sub New()
			InitializeComponent()
		End Sub
	End Class
End Namespace

になる。

けれど、

Namespace HelloWorld
End Namespace

はいらないので、消すこと。

PHP内でTokenを使う

<?php
$original= "[current-page-url]";
$original=  token_replace($original, $type = 'global', $object = NULL, $leading = '[', $trailing = ']');
if ($original == "http://www.msignal.info/home") {
  ・・・処理・・・
}
?>

DrupalPHP内でTokenを利用する方法がよく判らず難儀した。結局、上記のようにしたが、もっと上手な方法があるはず。
current-page-urlが、http://www.msignal.info/home の時に、処理をするスクリプト