- PR -

VB.Net メールボックス作成

投稿者投稿内容
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2006-03-15 17:49
いつもお世話になっております。

VB6.0 から VB.Net2003 にバージョンアップしたもので、
Active Directory にユーザーを追加し、
Exchange サーバにメールボックスを作成する処理を行っているところなのですが。


Dim adsUser As ActiveDs.IADsUser
Dim objMailbox As CDOEXM.IMailboxStore
Dim gstrMailboxStore As String

gstrMailboxStore = "LDAP://" + Servername + _
・・・(長いので略)

(中略:adsUser.EmailAddress 等セット)

adsUser.AccountDisabled = False
adsUser.SetInfo()

objMailbox = adsUser
objMailbox.CreateMailbox(gstrMailboxStore)
adsUser.SetInfo()


以上のような処理を行っております。
objMailbox = adsUser のところで、VB6.0では objMailbox の値が変わったのですが、
VB.Net では Nothing のまま変わらず、メールボックスが作成されませんでした。

.Netでは以上のような感じでは駄目なのでしょうか?
別のサンプルを参考にもう一度組みなおしたほうが良いかとも思うのですが、
できるだけ変換されたコードをそのまま使えたらと思い、相談させていただきました。
宜しくお願いします。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-03-15 18:27
こんにちは。

あい昧な答え方ですが、
引用:

objMailbox = adsUser


この部分で adsUser を IMailboxStore型にキャストしてやれば通る気がします。
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2006-03-16 10:54
ueさん、ご回答ありがとうございます。

objMailbox = CType(adsUser, CDOEXM.IMailboxStore)
objMailbox = DirectCast(adsUser, CDOEXM.IMailboxStore)

をそれぞれ試してみましたが、Err.Number=13(型が違う)のエラーとなりました。

日本語ページのみでyahoo検索して調べていたのですが、
IMailboxStore についての説明しているサイトがほとんどないので、
これから辞書片手に、海外のサイトも見て回ろうかと思います。

また何かヒントになりそうなものをいただけたら幸いです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-16 11:01
引用:

ueさんの書き込み (2006-03-15 18:27) より:

この部分で adsUser を IMailboxStore型にキャストしてやれば通る気がします。


現状、実行できていることを考えると遅延バインディングになっているっぽいので、
明示的にキャストしても結果は変わらないでしょう。

adsUser インスタンスの状態自体がまずいようにも考えられるのですが、
とりあえず、objMailbox の型を教えてください。> art さん

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2006-03-16 12:12
じゃんぬねっとさん、ご回答ありがとうございます。

objMailBoxの型は書いてあるとおり、「CDOEXM.IMailboxStore」です。

ただし、
objMailBox = New CDOEXM.IMailboxStore
のようにはできませんでした。(コンパイルエラーになります)

> adsUser インスタンスの状態自体がまずいようにも考えられるのですが、
これはたしかに気になっている点ではあります。
ただ、VB6.0と同様に各インスタンスに値をセットできているので、
ひとまず問題はなさそうと思っています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-16 12:33
引用:

artさんの書き込み (2006-03-16 12:12) より:

objMailBoxの型は書いてあるとおり、「CDOEXM.IMailboxStore」です。


ごめんなさい... 見てませんでした。

引用:

objMailBox = New CDOEXM.IMailboxStore
のようにはできませんでした。(コンパイルエラーになります)


objMailBox.CreateMailBox([CNStrings])
です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2006-03-16 13:26
じゃんぬねっとさん、ご回答ありがとうございます。

> objMailBox.CreateMailBox([CNStrings])
これは

objMailbox.CreateMailbox(gstrMailboxStore)

で行っておりますが、その前行の

objMailbox = adsUser

で、objMailbox が Nothing のままなため、このまま実行すると、
Err.Number=91(オブジェクト参照がオブジェクトインスタンスに設定されていません。)のエラーになります。

処理の流れのイメージとしては、
(1)ActiveDirectoryにユーザ追加
(2)追加したユーザ情報を、これから追加するメールボックスのユーザ情報としてセット
(3)メールボックス追加処理
といった感じだと思います。
また、(1)でActiveDirectoryにユーザが追加されているのは、
「objMailbox = adsUser」の前にブレークを貼って確認しています。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-03-16 13:32
ueです。
じゃんぬねっとさんフォローありがとうございます。

artさん、こちらの [Here is my VB.NET Code that works] から始まる発言に VB.net のコードがあります。ヒントになるかもしれません。
http://www.dotnet247.com/247reference/msgs/18/92050.aspx

GetObject 関数がミソなんでしょうか。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vblr7/html/vafctgetobject.asp

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