- - PR -
VBSで作成したFunctionをC#側から呼びたい。
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-05 17:44
いいえ、ありません。 とりあえず ScriptControl をインスタンス化するだけならば、参照設定へは 「Microsoft Script Control」 を追加するのみで良いです。
と書いてはありましたが、念のため確認して頂きたかったのは、
このコードでインテリセンスに表示されないのは、参照設定が正しくできていないくらいしか原因が思いつかなかったからです。 using ディレクティブは、ただ名前空間が省略できるという意味でしかないですので、そこに原因はないでしょう。 他に何らかの要因 (たとえば、IDE の不具合など) があるといけないので、新規のプロジェクトでも確認してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-09-05 17:50
おk。 良かったです。 やはり新規プロジェクトなどで試すという行為は大切ですね。 orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-09-05 18:04
色々なページを参照しているとじゃんぬさんのページにたどりつき気になる文章が・・・ >>個人的には COM を扱う場合は COM 専用の言語で実装することをお勧めします。VBA 側のマクロを .NET アプリケーションから呼び出す方法、VB または VBScript に処理を実装して呼び出す方法、あるいは ScriptControl を利用する方法があります。これらの方法であれば参照カウントの面倒はそれほど面倒ではありません。 今、私はC#上でVBSのFunctionを呼び出し、C#に返された値を使いデータベースに入れるといった処理を想定し、作成しております。 しかし、今さっき私が質問した内容などにはScriptControlをnewしてましたよね。 今、私がしているのはScriptControlを利用している方法に当たるのでしょうか? 個人的には、VBScriptをに処理を実装して呼び出す方法がいいんですが。 それとも、上記二つ両方含めた内容でしょうか。仮にそうであればじゃんぬさんの書いてることに矛盾すると思うのです。 | ||||||||||||
|
投稿日時: 2007-09-05 18:32
はい。 参照ページを見る限りその方法に当たると思います。
見方によっては両方になるでしょうね。 VBS ファイルで実行したいステートメントを動的に ExecuteStatement で流すことになるわけですから。
そうですか? そのムジュンというのが気になりますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-09-05 19:15
完璧どころか、期待通りの動作をする保証すらも無い(かもね)ってことです。 なんせ、コントロールを作った方にしてみれば想定外の使い方かもしれないわけなので。 仮に想定どおりに動いているように見えていても ・いつ何時破滅的な状況に陥るかもしれない ・正規のルートによるサポートは期待できない ということは一応覚悟しておくべきです。 なんてことは既に承知の上かもしれませんが、リスクは多少大きめに評価しておいた方が無難だと思うので、一応念のため。 [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-09-05 19:18 ] | ||||||||||||
|
投稿日時: 2007-09-06 17:46
お返事ありがとうございます。 返信遅れました。VBSと格闘してました。 ようやく、VBS側から値をもらうってことが出来ました。 しかし、欲しいのは一つだけ値ではなく複数の値です。 セルA:1〜セルA:15までの値を欲しいといったときにいい形で取得できません。 無理やりC#側でforをまわし、VBSを何回も走らせる方法でやってみました。。 走らせるとき、引数にセル番号、Excelインスタンスを渡しました。 しかし、この方法だとパフォーマンスが最悪です。 何かいい方法はないでしょうか。キーワードだけでもいただきたいです。 よろしくお願いします。 [ メッセージ編集済み 編集者: オウドー 編集日時 2007-09-06 18:12 ] | ||||||||||||
|
投稿日時: 2007-09-06 18:02
上記に矛盾があると思います。 この表現では、VBScriptとScriptControlは完全別々に扱い実装すると思ってしまいます。 私は、VBScriptとScriptControlの二つを使うことにより行いたい処理を実装できると思っております。勘違いならすいません。
そうですよね。完全どころか・・・(略 [ メッセージ編集済み 編集者: オウドー 編集日時 2007-09-06 18:04 ] | ||||||||||||
|
投稿日時: 2007-09-06 18:17
矛盾?
なんでも貫く矛と、必ず防ぐ盾を売る男が居た。この男に、ある人が聞いた。「その矛で、その盾を突くと、どうなるかね?」 矛盾って、二つの物事があると思っていた。 「VBScript に処理を実装して呼び出す方法、あるいは ScriptControl を利用する方法があります」 この表記には、一つの物事(呼び出す方法は二つある)しか書かれていないと思う。 |