- - PR -
キャスト
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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では、キャストに失敗してしまいます。 色々ためしたのですが、どうしても値が取れません。 何か御存知の方、教えて下さい。 | ||||||||
|
投稿日時: 2005-11-14 22:01
逆に教えてください。 キャストに失敗するとは何か例外が発生するということでしょうか? そうであれば、その例外は何でしょうか? InvalidCastException でしょうか? NullReferenceException とかじゃないですよね? キャスト対象の値をウォッチ式で見てみましたか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-14 23:21
ご返信ありがとうございます。
objSch.Appointments.Item.Startは、ウォッチすると、 Sysytem._ComObjectとなっています。 エラーは、Property型をDate型にキャストできません。 というエラーです。 たぶん、Comを返すとDate/Time型がProperty型に自動で 変換されているのではっと感じます。 | ||||||||
|
投稿日時: 2005-11-14 23:22
MSDNでは、以下を参考にしています。
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/exchserv/html/spchap4b_7ies.asp> VB6では、Date型に直接代入できます。 | ||||||||
|
投稿日時: 2005-11-14 23:42
それは大方予想がついているのですが、値は見れませんでしたか?
Start ではなく StartDate プロパティならイケるなんてことはありませんか? Date/Time 型と System.DateTime 構造体じゃ互換性がないのかな。 内部の値が判ればある程度の推測が可能なのですが... COM オブジェクトであれば、Value プロパティを使うことで値は確認できるはずですが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-15 09:57
事前バインディングすれば、キャストに悩まずにすむでしょう。
| ||||||||
|
投稿日時: 2005-11-15 10:06
objApp の宣言部分が書かれていませんが、これは System.Object 型なんでしょうか? 私も少し前まで勘違いしていたのですが、この場合 objApp が、 CreateObject で生成されるオブジェクトの型と合致していれば、 アーリーバインディング (事前バインディング) になるそうです。 レイトバインディング (遅延バインディング) になるのは、objApp が System.Object の時です。 どちらにしても、CreateObject ではなく、コンパイル解決できる New の方が好きですけどね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-15 21:31
こんばんは。やっと解決できました。
Appointments.Item.Startを Appointments.Item.Properties("Start")とすることで解決です。 Schedule+はVB4の時代のモデルでちょっと古いみたいです。 結局Propertiesという構造体が全てでした。 Exchange上のSuchedule+の予定を参照する方法で今回の方法以外の もっとスマートな方法はないでしょうか? ご回答有り難う御座いました。 |