Hello all,
I execute this code. First time I execute everything's fine. Second time my application hangs and I have to reboot my computer. I guess that there could be something related to outlook still in memory. But I don't understand.
lContinue = .F.
oOutlook = CREATEOBJECT("Outlook.Application")
outlookAccounts = oOutlook.GetNamespace("MAPI").Accounts
FOR i = 1 TO outlookAccounts.Count
IF outlookAccounts.Item(i).DisplayName = "myemail@mycompany.com" THEN
lContinue = .T.
EXIT
ENDIF
ENDFOR
oOutlook = null
outlookAccounts = null
IF !lContinue
Messagebox( "You can't use that application.")
QUIT
ENDIF
You must release the variables in reverse order. It's also recommended to use Release to absolutely make sure that the variables are released. IOW
outlookAccounts = null
oOutlook = null
Release outlookAccounts && Recommended
Release outlook && Recommended
Hi Tore,
Thank you for replying. I have the same problem. Here is the revised code.
lcontinue = .F.
oOutlook = CREATEOBJECT("Outlook.Application")
IF VARTYPE( oOutlook) = "U"
Messagebox( "Outlook must be running")
oOutlook = null
RELEASE oOutlook
QUIT
ELSE
outlookAccounts = oOutlook.GetNamespace("MAPI").Accounts
FOR i = 1 TO outlookAccounts.Count
IF outlookAccounts.Item(i).DisplayName = "SomeEmail@mybusiness.com" THEN
lcontinue = .T.
EXIT
ENDIF
ENDFOR
outlookAccounts = null
RELEASE outlookAccounts
IF !lcontinue
Messagebox( "You can't use the application.")
oOutlook = null
RELEASE oOutlook
quit
ENDIF
ENDIF
oOutlook = null
RELEASE oOutlook
Are you showing all the code?, I mean, there's nothing else in between the lines you show?
Added later:
Have you tried GetObject instead pf CreateObject?
Another possibility is that VFP may need some time to release the object(s)?
Yes all the code
Here is the revised code.
lContinuer = .F.
oOutlook = CREATEOBJECT("Outlook.Application")
IF VARTYPE( oOutlook) = "U"
DO FORM ts_Messagebox WITH I("Outlook must be running")
oOutlook = null
RELEASE oOutlook
QUIT
ELSE
oMapi = oOutlook.GetNamespace("MAPI")
outlookAccounts = oMapi.Accounts
FOR i = 1 TO outlookAccounts.Count
IF outlookAccounts.Item(i).DisplayName = "anemail@mycompany.com" THEN
lContinuer = .T.
EXIT
ENDIF
ENDFOR
outlookAccounts = null
RELEASE outlookAccounts
oMAPI = null
RELEASE oMAPI
IF !lContinuer
DO FORM ts_Messagebox WITH I("You can't use the application.")
oOutlook = null
RELEASE oOutlook
quit
ENDIF
ENDIF
oOutlook = null
RELEASE oOutlook
Even after the adjustments I have the same problem. Couple of things to mention though. If I run my code through the debugger First execution runs ok. but after that I have to reboot my computer. If I run through compiled app the message "You can't use the application." is not even shown. and after the non-message I have to reboot my computer if I want to run that code again.
Please read my previous, updated message.
Oops I haven't tried with GetObjects. I'll get back to you
I never used getobject.
I tried this and it gave me an error
oOutlook = getobject( ,"Outlook.Application")
What's wrong?
You have asked the same question in at least two forums, let's continue in Level Extreme.