Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

DirectCast is not valid

[es] :: .NET :: DirectCast is not valid

[ Pregleda: 1745 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shadowed
Vojvodina

Član broj: 649
Poruke: 12881



+4827 Profil

icon DirectCast is not valid24.01.2005. u 13:47 - pre 246 meseci
Pravim aplikaciju koja treba da ima podrsku za pluginove. Napravio sam interfejs i jednu klasu koja ga implementira i to kompajlirao. Problem je sa kodom za "ucitavanje" interfejsa:
Code:

Dim tmpPlugin As IInput
Dim i As Integer
Dim x As Object

InputPlugins = PluginEngine.FindPlugins(PluginsPath, "IInput")
For i = 0 To InputPlugins.Length - 1
    x = PluginEngine.CreateInstance(InputPlugins(i))
    tmpPlugin = DirectCast(x, IInput)
    lstInput.Items.Add(tmpPlugin.Name)
Next

Linija x = PluginEngine.CreateInstance(InputPlugins(i)) se izvrsi dobro:

a kod sledece linije dobijem error iz naslova. Probao sam i CType ali je ista situacija.
Trazio sam dva dana sta bi mogla da bude greska ali nisam nasao...
Prikačeni fajlovi
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
194.106.171.*



+311 Profil

icon Re: DirectCast is not valid24.01.2005. u 14:15 - pre 246 meseci
Pogledaj ovde, možda ti pomogne:
http://www.yoda.arachsys.com/csharp/plugin.html
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12881



+4827 Profil

icon Re: DirectCast is not valid24.01.2005. u 14:31 - pre 246 meseci
Hvala.
Koliko sam shvatio, tu u sustini kaze da se treba koristiti interface iz istog assembly-a sto sam ja shvatio da trebam da postavim i u projektu koji je "host" sa plugin-ove referencu ka .dll-u u kome je interface (kao sto sam to uradio u samom rojektu za plugin). Iako trenutno nije tako u mom projektu (imam duplirani kod za interface) probao sam i tako i doslo je do iste greske.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
194.106.171.*



+311 Profil

icon Re: DirectCast is not valid25.01.2005. u 08:05 - pre 246 meseci
Negde si pogrešio, evo ja sam probao istu stvar i radi. Znači napravio sam Assembly za interfejse i referencirao sam ga i u glavnom i u plugin assemblijima i to radi. Pogledaj da li ti se slažu verzije assemblija koje referenciraš, možda je u tome problem.
Ako hoćeš poslaću ti kod, pa pogledaj kako radi.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12881



+4827 Profil

icon Re: DirectCast is not valid25.01.2005. u 12:15 - pre 246 meseci
Pa mozes poslati ako si vec napravio inace ne moras, mogu i sam da sklopim iz sa onog linka. Sinoc sam ponovo pokusao da referenciram isti assembly i nije radilo. Probacu jos da skinem referencu i dodam je ponovo za slucaj da ima neki konflikt sa verzijom.
Imam primer koji radi i koji je gotovo identican ovom mom. Razlikuje se samo u tome sto se na drugom mestu poziva InputPlugins = PluginEngine.FindPlugins(PluginsPath, "IInput"), druga su imena promenjljivih, klasa, itd. i, naravno, drugaciji je interfejs. Zanimljivo je da je u tom primeru radilo i bez reference ka istom .dll-u vec sa kopiranim kodom.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
194.106.171.*



+311 Profil

icon Re: DirectCast is not valid25.01.2005. u 12:31 - pre 246 meseci
Ovo je kod za zajednički interfejs (Common assembly):

Code:

Public Interface IPlugin

    Function Info() As System.String

End Interface


Ovo je kod za jedan plugin (Plugin assembly):
Code:

Public Class Proba
    Implements Common.IPlugin

    Public Function Info() As String Implements Common.IPlugin.Info
        Return "Plugin No.1"
    End Function

End Class


Ovo je poziv plugina Proba (WindowsProject assembly):
Code:

        Dim A As System.Reflection.Assembly
        Dim T As System.Type
        Dim Obj As Common.IPlugin
        A = System.Reflection.Assembly.Load("Plugin")
        T = A.GetType("Plugin.Proba")
        ' Instanciranje
        Obj = T.InvokeMember(Nothing, System.Reflection.BindingFlags.DeclaredOnly Or
                    System.Reflection.BindingFlags.Public Or
                    System.Reflection.BindingFlags.NonPublic Or 
                    System.Reflection.BindingFlags.Instance Or 
                    System.Reflection.BindingFlags.CreateInstance, 
                    Nothing, Nothing, Nothing)
        MsgBox(Obj.Info())


Znači WindowsProject i Plugin imaju referencu samo na Common. Kad prekompajliram sva tri i iskopiram Plugin.dll u \bin WindowsProject-a to radi. Sad ja nemam ovaj PluginEngine da vidim kako je to implementirano, ali pretpostavljam da nije u njemu bio problem već da je to nekako radilo različitim interfejsima, ali ne znam kako??? Uglavnom, moje mišljenje je da ne bi smelo da radi bez istog interfejsa... Izvini ako te smaram ali me interesuje ishod ovoga, šta pravi problem....




[Ovu poruku je menjao dusans dana 25.01.2005. u 23:16 GMT+1]
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12881



+4827 Profil

icon Re: DirectCast is not valid25.01.2005. u 13:09 - pre 246 meseci
Kako bi mogao da me smaras ako pokusavas da mi pomognes... :)

Nazalost, nemam VS na ovom racunaru pa do sutra ne mogu da javim rezultate. Probacu ovako, ako proradi videcu da to prilagodim mojim potrebama jer ionako ima manje koda.
Ako te interesuje pogledaj http://www.developerfusion.com/show/4371/ moj kod je zasnovan na ovom primeru (samo prilagodjen i sa promenjenim imenima). PluginEngine iz mog koda je malo izmenjeni PluginServices sa tog linka.


PS. mozda ne bi bilo lose da prelomis onaj dugacki red u kodu da poruka ne bude toliko razvucena.
 
Odgovor na temu

[es] :: .NET :: DirectCast is not valid

[ Pregleda: 1745 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.