- PR -

COMの呼び出し

1
投稿者投稿内容
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2001-12-10 20:48
おひさしぶりです、けいです。
.NETからCOMを使いたくて、参照の追加から読み込んだのですが、
オーバーロードされた関数のうちのひとつしか呼べないみたいなのです。
それ以外の関数ってどうすれば呼べるようになるのでしょうか?

具体的には、Excel.Applicationの
Workbooks.Add();
をよびたいのですが、
Workbooks.Add(object Template);
しかみえないのです。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2001-12-10 22:00
Workbooks.Add_2は見えませんか?
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2001-12-10 23:46
> Workbooks.Add_2は見えませんか?
見えないです。
'Excel.Workbooks' に 'Add_2' の定義がありません。
と言われちゃいます。

#tlbimp excel9.olb
#ildasm /text > excel.txt
#パラメータ削除
#ilasm excel.txt
#なんてこともしてみましたが、さすがに動く分けないみたいです(^^;
#ildasmの結果にはきちんと[opt]ってついてるんですけどねぇ...
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2001-12-11 09:48
なんだ、てっきりAdd()ってメソッドがあるのかと思ったら、そんなメソッドは
実際にないんですね。引数がオプションであるということと、引数がないって
こととは違います。

C#にはオプション引数はありませんから、必ず引数を指定しなくてはなりません。
[opt]っていうのは、ILの仕様上、言語レベルでサポートするしないを決めて
いいようですから、C#ではサポートしません。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2001-12-11 12:29
ちなみに、
引用:

Workbooks.Add_2は見えませんか?


この返答は、私がご質問を勘違いしてました。COMにはオーバーロードなんてない...。

Add_2とかってなるのは、C#でオーバーロードメソッドを書いた後、それをtlbexpしたときの話で、COMをtlbimpしたときには絶対にこうはなりません。そういう名前のメソッドを定義しない限り。
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2001-12-11 20:12
引用:

引数がオプションであるということと、引数がないってこととは違います。


そうですね。勘違いでした。
引数がオプションってことは、デフォルト引数が指定されていて、
何らかの値を渡せば、省略したときと同じ動作をしてくれるわけですよね。
( nullは失敗(^^; )

デフォルトの値ってどこかを探せばわかるのでしょうか?
あるとすれば、OLEViewだと思うのですが、
それっぽいものは見当たらないです...
1

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