none
[VB.NET 2008 - FW2.0] Remoting e passaggio puntatori oggetti RRS feed

  • Discussione generale

  • Ciao a tutti,
    ho reaalizzato 2 applicativi che comunicano tra di loro mediante la tecnica
    del remoting (TcpChannel) e il passaggio degli oggetti funziona
    perfettamente. Il problema si presenta col passaggio del puntatore di un
    oggetto Unmanaged.
    Quando cerco di utilizzare il puntatore che mi viene passato (come integer)
    nell'applicativo client per ottenere l'oggetto, si presenta l'errore di
    System.AccessViolationException.
    C'è un modo per superare il problema?
    L'oggetto è praticamente una bitmap, ma vorrei evitare di serializzarla in
    array di byte e poi passarla, per problemi di performance.
    E' possibile?
    Grazie a tutti
    Saluti
    Pasquale

    giovedì 29 luglio 2010 12:57

Tutte le risposte

  • ho reaalizzato 2 applicativi che comunicano tra di loro mediante la tecnica
    del remoting (TcpChannel) e il passaggio degli oggetti funziona
    perfettamente. Il problema si presenta col passaggio del puntatore di un
    oggetto Unmanaged.
    Quando cerco di utilizzare il puntatore che mi viene passato (come integer)
    nell'applicativo client per ottenere l'oggetto, si presenta l'errore di
    System.AccessViolationException.
    C'è un modo per superare il problema?
    L'oggetto è praticamente una bitmap, ma vorrei evitare di serializzarla in


    Ciao Pasquale,

    quindi i due applicativi girano nello stesso PC giusto ?

    NON è che è un problema dell'oggeto unmanaged che utilizzi ?

    prova a postare un pò di codice (o un progetto di test) per replicare il problema magari diventa più semplice capire.

     

    Ciao

    Renato Marzaro

     

    giovedì 29 luglio 2010 14:32
  • Ciao,

    L'operazione che compio è il passaggio del puntatore ad un'immagine decodificata a partire dal video in MPEG4.

    Praticamente, dal programma client richiedo il frame così:

    Dim vi As Remoting.VideoInfo = RemoteMediaFileProxy.VideoFrameUpdate()

    in cui l'interfaccia che definisce RemoteMediaFileProxy è:

    <Serializable(), System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Assert, Name:="FullTrust")> _
    Public Class VideoInfo
     ...
     Public vframe As Integer 'IntPtr del Frame decodificato, se richiesto
     Public width As Integer
     Public height As Integer
    End Class
    
    Public Interface IRemoteMediaFile
     ...
    
     Sub TestConnection()
    
     Function VideoFrameUpdate() As Remoting.VideoInfo
    End Interface
    

    Sull'applicativo server viene mappato su:

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Assert, Name:="FullTrust")> _
    
    Public Class RemoteMediaFile
     Inherits MarshalByRefObject
     Implements IRemoteMediaFile
    
     Public Overrides Function InitializeLifetimeService() As Object
      Return Nothing
     End Function
    
     Public Sub TestConnection() Implements Remoting.IRemoteMediaFile.TestConnection
     End Sub
     ...
     Public Function VideoFrameUpdate() As Remoting.VideoInfo Implements Remoting.IRemoteMediaFile.VideoFrameUpdate
      Try
       Return Media.VideoFrameUpdate()
      Catch ex As Exception
      End Try
      Return New Remoting.VideoInfo
     End Function
    End Class
    

    Praticamente, se cerco di disegnare a video l'immagine puntata da vframe, mi genera un'eccezione di System.AccessViolationException.

    Praticamente non ho accesso alla memoria puntata da vframe.

    Grazie mille

    Ciao

    Pasquale


    giovedì 29 luglio 2010 15:14
  • Ciao a tutti,

    voglio spiegare meglio la mia problematica...

    Praticamente ho un thread critico nella decodifica di un frame video che può generare un crash (eccezione System.ExecutionEngineException) e ho la necessità di "isolarlo" per evitare la chiusura del programma principale. Esistono tecniche per isolare il thread come un processo/job separato che se va in crash non mi blocca l'applicativo principale?

    Grazie ancora

    Ciao

    Pasquale

    venerdì 30 luglio 2010 06:56
  • Ciao Pasquale, hai trovato una soluzione al tuo caso?

    I caso affermativo potresti per cortesia segnalarla o postarla(se nessuna risposta ti ha aiutato)?

    Grazie per la collaborazione.


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.
    lunedì 9 agosto 2010 08:11