Eccezione Stranissima

lunedì 06 giugno 2011 - 14.57

giamisan Profilo | Newbie

Ciao a tutti, sto iniziando a utilizzare delle dll sviluppate da una software house per crearmi il mio programmino. Questa azienda, per aiutare gli sviluppatori, mette a disposizione un codice di esempio in C#. Io scrivo in VB e più in particolare ho Visual Studio 2010.

Provando a lanciare in debug il loro esempio mi viene sempre costantemente sollevata una eccezione.
Siccome il loro programma è un po' complesso, per cercare di capirci meglio mi sono creato una mia soluzione semplicissima, ho importato tutti i riferimenti che loro utilizzano nel loro esempio, ho inserito un modulo nel mio progetto con una SubMain all'interno del quale creo gli oggetti che mi servono e alla fine apro il Form.icazione.
Ho bisogno di creare 6 oggetti, riesco a crearne tranquillamente 5 ma sul sesto mi si impasta sempre tutto generandomi un'eccezione.

L'eccezione in questione è:

System.AccessViolationException
{"Tentativo di lettura o scrittura della memoria protetta. Spesso questa condizione indica che altre parti della memoria sono danneggiate."}

Ho chiesto assistenza alla casa del software i quali ovviamente hanno risposto che per loro funziona tutto alla perfezione. Perchè allora sul mio pc non va?
QUalcuno ha idea di come possa uscirne fuori?


Grazie mille
Giacomo

nico839 Profilo | Senior Member

ciao,

qui
http://www.dotnethell.it/forum/messages.aspx?ThreadID=28245

hanno la tua stessa eccezione su Vista con un controllo activeX e hanno risolto...
Ciao.
Nicolas

http://perledinico.blogspot.com

giamisan Profilo | Newbie

Ciao,
avevo già letto quel post però non mi sembrava potesse fare il caso mio per due motivi:

1) Io sono su Windows7
2) si tratta di disabilitare in modo forzato l'UAC di Windows che io peraltro ho già disabilitato di default nelle impostazioni account utente. Inoltre l'UAC di Windows protegge soltanto, per quello che ho potuto capire, la cartella Programmi mentre la mia applicazione la cartella programmi non la sfiora nemmeno

Cosa dici?

jackk87 Profilo | Junior Member

fai due prove:
1- esegui il programma come amministratore
2- compila il progetto solo per CPU x86

facci sapere

giamisan Profilo | Newbie

Ciao,
avevo già provato a fare le due prove che mi hai consigliato ma su entrambe l'esito è lo stesso.
Ho però forse scoperto una cosa, che mi pare strana. Se io vado in visualizzatore oggetti, nel namespace dove è presente la classe che devo istanziare la trovo immediatamente e si chiama cInfoService se ci clicco sopra, nella parte di destra in alto mi escono tutti i metodi, eventi, proprietà ecc...ecc....della classe ma vedo però che non vi è un metodo NEW. Nella parte destra in basso vedo giustamente "Public Class cInfoService Membro di ETInfoService".
Fin qui, a parte l'assenza del metodo NEW sembra tutto ok.
Quando vado nel codice e digito:

Dim mInfo as New cInfoService

una volta che sono andato a capo mi colora in azzurrino "cInfoService" e se ci vado sopra vedo: Interface cInfoService
Strano che da una parte me la veda come Class e dall'altra come Interfaccia. C'è però anche da dire che oltre a questo oggetto ne istanzio degli altri nello stesso identico modo, tutti vengono visti come Interface, ma nessuno da errore.....

Ho però anche notato un'altra cosa utilizzando IntelliTrace. L'eccezzione viene venerata all'ingresso della funzione System.Activator.CreateIstance perchè System.Type è sconosciuto.


Bohhhhhhh!!!!!


nico839 Profilo | Senior Member

ciao, potresti postare un po di codice?
Magari oltre al tuo, anche quello di esempio della ditta?
Ciao.
Nicolas

http://perledinico.blogspot.com

giamisan Profilo | Newbie

Forse ho capito il problema.

cInfoService è una interfaccia per la classe cInforServiceClass.
Il problema qual è? Che se io apro VisualStudio con la mia soluzione e vado nel Visualizzatore Oggetti non vedo l'interfaccia cInfoService con il simbolo interfaccia ma me la visualizza con il simbolo di classe.
Se io invece in Visual Studio carico la loro soluzione di esempio, apro il Visualizzatore di Oggetti, vado nello stesso Namespaces vedo sia la classe cInfoServiceClass sia l'interfaccia cInfoService.

A questo punto invece di dichiarare

Dim mInfo as new cInfoService

ho provato a dichiarare

Dim mInfo as new cInfoServiceClass

e qui mi da errore perchè mi dice di utilizzare l'interfaccia corretta.

Ma a questo punto mi chiedo: perchè da una parte vedo sia l'interfaccia sia la classe (nel loro progetto) mentre nel mio vedo solo la classe e non l'interfaccia??!!!

giamisan Profilo | Newbie

Ok forse ho risolto, ditemi se ho fatto un cavolata...devo ancora provarlo ma almeno ora non mi da quella noiosa eccezione e tutto sembra essere inizializzato correttamente.

Ho aggiunto alla mio progetto una classe all'interno della quale ho scritto

Implements cInfoService

Come ho dato INVIO lui i ha caricato tutta una serie di eventi, function e proprietà.

A questo punto invece di fare come facevo prima (Dim mInfo as New cInfoService) ho dichiarato:

Dim mInfo as New ImpClcInfoService

dove ImpClInfoService è la classe che implementa la mia interfaccia cInfoService.

Pensate possa funzionare?


Grazie
Giacomo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5