Excelのワークシート関数 RTD (RealTimeData)用サーバ作成メモ

仕事でRTDを使ってExcelにデータを表示したいと言う話がでてきたので、サーバを作る方法を調べたメモです。
RTD用のサーバはDCOMなので C#で作ることを前提に書きます。RTDからのやりとりは、Microsoft.Office.Interop.Excel のIRtdServerインターフェイスを実装したクラスをCOMで公開しておく必要があります。
Microsoft.Office.Interop.Excel自体は、Office PIA(Office プライマリ相互運用機能アセンブリ)に含まれているので、Officeのインストール時に先に.NETフレームワークをインストールしておくと、オプションで[.NET プログラミング サポート] が選べるようになるらしい*1です。ただ、 からも入手できます。
さて、ExcelのPIAへの参照を設定したら後は IRtdServerインターフェイスを実装したクラスを作ります。Microsoftのサンプルがありますが、これはVisalBasicで実装する場合の話なのでちょっとややこしいです。502 Bad Gateway こちらはもっと簡単なものですが、C#でかかれたサンプルです。この2つを見ながらなんとなくDLLとして実装していけば RTD用のCOMサーバの完成です。あとは作成したDLLをCOMに登録しておけばExcelのRTD関数から呼び出すことができます。

しかし、一つ問題が発生。とりあえず、Excelに対して文字列を返すことができるのですが、VBと違いC#ではVariant型が扱えません。そのため、エラー値をExcelに返す方法が分かりませんでした。エラーコードをobject型で返してもただの数値になってしまうし、エラーの表示文字列を返してもただの文字列になってしまいます。VBのCVErr()で返してる型はVariantなんですが、これと同じものをC#から返す方法はないんでしょうか?この辺りはExcelをCOMで直接触る場合も同じような気もするので、出来ないわけないんだろうとは思うのですがMSDNからそれらしい情報を見つけることができませんでした。知っている方がいらっしゃいましたら、教えてください orz。