- PR -

キャスト

投稿者投稿内容
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-11-14 21:29
いつもお世話になっております。

VB.NETにてMicrosoft Schedule+ 7.0をCreateしています。
objApp=CreateObject("SchedulePlus.Application")
objAppよりScheduleForFileメソッドよりオブジェクトを取得し、
objSch.Appointments.Item.Startを参照しています。
Startの中身はDate/Time型(MSDNより)でVB6ではDate型に代入することができます。

しかし、VB.NETでは、キャストに失敗してしまいます。
色々ためしたのですが、どうしても値が取れません。

何か御存知の方、教えて下さい。




じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-14 22:01
引用:

beanさんの書き込み (2005-11-14 21:29) より:

しかし、VB.NETでは、キャストに失敗してしまいます。
色々ためしたのですが、どうしても値が取れません。

何か御存知の方、教えて下さい。


逆に教えてください。
キャストに失敗するとは何か例外が発生するということでしょうか?
そうであれば、その例外は何でしょうか?
InvalidCastException でしょうか?
NullReferenceException とかじゃないですよね?
キャスト対象の値をウォッチ式で見てみましたか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-11-14 23:21
ご返信ありがとうございます。

objSch.Appointments.Item.Startは、ウォッチすると、
Sysytem._ComObjectとなっています。

エラーは、Property型をDate型にキャストできません。
というエラーです。

たぶん、Comを返すとDate/Time型がProperty型に自動で
変換されているのではっと感じます。
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-11-14 23:22
MSDNでは、以下を参考にしています。

<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/exchserv/html/spchap4b_7ies.asp>

VB6では、Date型に直接代入できます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-14 23:42
引用:

beanさんの書き込み (2005-11-14 23:21) より:

objSch.Appointments.Item.Startは、ウォッチすると、
Sysytem._ComObjectとなっています。


それは大方予想がついているのですが、値は見れませんでしたか?

引用:

エラーは、Property型をDate型にキャストできません。というエラーです。


Start ではなく StartDate プロパティならイケるなんてことはありませんか?
Date/Time 型と System.DateTime 構造体じゃ互換性がないのかな。

内部の値が判ればある程度の推測が可能なのですが...
COM オブジェクトであれば、Value プロパティを使うことで値は確認できるはずですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-11-15 09:57
事前バインディングすれば、キャストに悩まずにすむでしょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-15 10:06
引用:

todoさんの書き込み (2005-11-15 09:57) より:

事前バインディングすれば、キャストに悩まずにすむでしょう。


objApp の宣言部分が書かれていませんが、これは System.Object 型なんでしょうか?

私も少し前まで勘違いしていたのですが、この場合 objApp が、
CreateObject で生成されるオブジェクトの型と合致していれば、
アーリーバインディング (事前バインディング) になるそうです。
レイトバインディング (遅延バインディング) になるのは、objApp が System.Object の時です。

どちらにしても、CreateObject ではなく、コンパイル解決できる New の方が好きですけどね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-11-15 21:31
こんばんは。やっと解決できました。

Appointments.Item.Startを
Appointments.Item.Properties("Start")とすることで解決です。
Schedule+はVB4の時代のモデルでちょっと古いみたいです。
結局Propertiesという構造体が全てでした。

Exchange上のSuchedule+の予定を参照する方法で今回の方法以外の
もっとスマートな方法はないでしょうか?

ご回答有り難う御座いました。

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