Avatar billede hyber Nybegynder
28. november 2005 - 21:12 Der er 5 kommentarer og
1 løsning

Flere objekter med samme navn..

Jeg er fornylig gået over til vb.net, og der er stadig småfejl der irretere mig.. Hvorfor kan jeg ikke have 2 objekter i 2 forskellige subs eller funktioner der hedder det samme??

Jeg kører denne function tidligt i mit program:

    Friend Function GetUnknownoBases(ByVal poFolder As Outlook.OlDefaultFolders) As Collection
        Dim oApp As New Outlook.Application
        Dim oNS As Outlook.NameSpace
        Dim oFolder As Outlook.MAPIFolder
        Dim oItems As Object
        Dim oItem As Object
        Dim colItems As New Collection
        Dim eGWBase As eGW.Items.eGWBase

        oNS = oApp.GetNamespace("MAPI")
        oFolder = oNS.GetDefaultFolder(poFolder)
        oItems = oFolder.Items

        For Each oItem In oItems
            eGWBase = New eGW.Items.eGWBase
            With eGWBase
                .EntryID = oItem.EntryID
                .LastModOutlook = oItem.LastModificationTime
                .StoreID = oFolder.StoreID
            End With
            colItems.Add(eGWBase, eGWBase.EntryID)
        Next

        Return colItems
    End Function


Efter et stykke tid kører jeg så denne funktion:


    Friend Function GetUnknownItem(ByVal pstrEntryID As String, ByVal poFolder As Outlook.OlDefaultFolders) As Object
        Dim oApp As New Outlook.Application
        Dim NS As Outlook.NameSpace
        Dim oFolder As Outlook.MAPIFolder
        Dim oItem As Object

        NS = oApp.GetNamespace("MAPI")
        oFolder = NS.GetDefaultFolder(poFolder)

        'AddLog: RaiseEvent StatusLog(gstrEvtFindOutlookItem & pstrOutlookID & pstreGWUID & plngeGWID)

        For Each oItem In oFolder.Items.Find("[EntryID] = '" & pstrEntryID & "'")
            With oItem
                If pstrEntryID = .EntryID Then
                    'Addlog: RaiseEvent StatusLog(gstrEvtFoundOutlookItem)
                    Return oItem
                    GoTo ExitNow
                End If
            End With
        Next oItem
        'Addlog: RaiseEvent StatusLog(gstrEvtOItemNotFound)
ExitNow:
    End Function


Når jeg så dim'er oApp, laver den denne fejl:

An unhandled exception of type 'System.InvalidCastException' occurred in egw.ocontrol.dll

Additional information: Unable to cast object of type System.__ComObject to type Outlook.ApplicationClass.


Jeg er støt på det flere gang når jeg kalder min objekter det samme, men det burde jo ikke være noget problem nå de bare er private i den funktion jeg bruger..

Lige dette tilfælde er de 2 functioner i samme klasse, men det burde da stadig ikke have noget at sige.. Hvad er det jeg gør forkert?

Det er et plugin til Outlook jeg er ved at lave, hvis det skulle have noget at sige....


Håber I kan hjælpe mig...

--
Esben
Avatar billede sys64738 Nybegynder
30. november 2005 - 21:00 #1
Tjek,:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnout2k2/html/odc_oladdinvbnet.asp

der ligger noget kode til download der også inkluderer en hjælpe klasse/wrapper til Outlook objektet. (OutlookItem.vb)
Avatar billede hyber Nybegynder
30. november 2005 - 21:15 #2
Det er også side jeg er gået ud fra, ellers var den en der lignede meget..

Jeg har fundet frem til at det er når jeg instantiate'r Outlook.Application objektet mere end en gang, det er faktisk ligemeget med objekt navnet som jeg først troede.. Det der undre mig er at det er lige meget om der er i 2 forskellige .dll filer jeg gør det det.. (De er dog i samme solution)

Jeg havde ingen problemer med det under VB6, der blev de instantiatet i vildskab.. Jeg undres..

--
Esben
Avatar billede sys64738 Nybegynder
30. november 2005 - 22:07 #3
Skal du have 2*OutLook åbnet ?

main:
Private Sub OnConnection(ByVal application As Object...
Dim oApp As Outlook.Application

funktion:
'Convert application from generic object to Outlook.Application
oApp = CType(application, Outlook.Application)
Avatar billede hyber Nybegynder
30. november 2005 - 22:19 #4
Tjaee tjoeee....

Vil det virke når det er forskellige projekter? Jeg har en .dll fil som starter mit program hvorefter en anden .dll overtager alt kommunikationen med Outlook..

Det kunne jo selfølgelig være jeg skulle lade den anden starte mit program op..

Kan du forklarre hvorfor du skriver application som expression i ctype funktionen? Jeg syntes nærmere den burde være oApp?
Avatar billede hyber Nybegynder
30. november 2005 - 22:47 #5
En anden ting er jo at oApp objektet gerne skulle blive "slettet" når subben eller funktionen er afsluttet. Herefter skulle jeg gerne kunne starte en ny oApp op ik?

Mit problem er ikke så meget at jeg gerne vil have 2 oApp objekter kørende samtidig, men mere at når jeg har kørt den _en_ gang kan jeg ikke bruge den igen..

Jeg må formode det fordi at .NET ikke tømmer sin objeckt "cache" med det samme, ligesom VB6 gør.

Eller er der ikke noget med at man kan, på en eller anden måde, kræve at man giver en klasse variabler når den instantiate's?? så kan oApp vel bare overføres enten som ByVal eller ByRef ik?

Jeg ved bare ikke lige helt hvordan det er :-)

--
Esben

Ps. Tak for hjælpen so far..
Avatar billede hyber Nybegynder
30. juli 2008 - 12:42 #6
nå må hellere få den lukket... sys64738 får sku points :-)

--
Esben
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester