Referenziare DLL da codice

martedì 06 maggio 2008 - 09.03

giorgiodipietro Profilo | Junior Member

Un saluto a tutto il forum,

Per referenziare una dll esterna ho sempre usato il sistema da finestra di progettazione aggiungendo la dll da finestra di dialogo apposita ai riferimenti.

Non esiste la possibilità di farlo da codice e non da progettazione?

Grazie
Giorgio

Non si finisce mai di imparare!!

Brainkiller Profilo | Guru

>Per referenziare una dll esterna ho sempre usato il sistema da
>finestra di progettazione aggiungendo la dll da finestra di dialogo
>apposita ai riferimenti.
>Non esiste la possibilità di farlo da codice e non da progettazione?

Ciao,
allora è un tecnica che non ho mai usato ma a grandi linee dovrebbe funzionare così.
Dovresti usare la classe Activator in questo modo:

Activator.CreateInstanceFrom(assembly, tipo);

La classe Activator consente di creare l'istanza di un oggetto contenuto in un Assembly.
Quindi dovrebbe essere ciò che fa per te. Spesso questo meccanismo si usa anche per sviluppare plugin (sottoforma di DLL) di una applicazione. Si mettono le DLL in una cartella si avvia l'applicazione, enumera le DLL e le carica.

Inutile dire che su questo argomento dovrai perdere un po' di tempo a fare test e simulazioni.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

AndreaKpr Profilo | Senior Member


Ciao, dipende un pò da cosa devi fare...
Se la dll esterna è sviluppata in .net per utilizzarla nel tuo applicativo, per un problema simile, io ho utilizzato il namaspace Reflaction

http://msdn.microsoft.com/it-it/library/system.reflection(VS.80).aspx

Nel mio caso ho avevo sviluppato un servizio che nella partenza instanziava una Dll "X" ed eseguiva un metodo "Y".
X e Y ovviamente parametrici...

Se invece la dll è Com, la cosa credo che sia un pelino + complicata...

giorgiodipietro Profilo | Junior Member

Il mio problema è correlato a Crystal.

Se da progettazione indico le dll versione X e sul computer di destinazione ci sono di una versione X.1 mi da eccezione per diversità di versione.
Pensavo che magari richiamando le dll non da progettazione ma da codice il tutto diventasse staccato dalla versione e questo problema non si presentasse più.

Questo problema sussiste soprattutto con Vista, dove mi da problemi con la versione di Crystal che uso e non posso certo ricompilare in 2.0 tre anni di lavoro..
Giorgio

Non si finisce mai di imparare!!

freeteo Profilo | Guru

ciao,
che versione hai di Crystal?
io ad esempio su vista ho avuto a che fare con la 8.5, gira tranquillamente sia come ambiente che dentro ad un progetto vb6.

Tu in che situazione sei, hai portato una versione dentro a visual studio .net percaso? intendo che hai fatto il riferimento alla tua versione COM...
Perche' ricorda che la versione di Crystal se minore, è compatibile con quella superiore, quindi ad esempio, puoi visualizzare e gestire da codice .net i report creati con le versioni minori, senza usare i componenti COM, ma usando direttamente le librerie già presenti in visual studio...

Dammi qualche altro dettaglio, spero di poterti essere utile.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

giorgiodipietro Profilo | Junior Member

Io uso Visual Studio 2002 e la versione di crystal già inclusa nel visual.

Allora il problema è sostanzialmente quando utilizzo l'anteprima, ovvero quando utilizzo il crontollo CrystalReportViewer.
Se stampo senza anteprima va tutto liscio.

Se invece stampo con l'anteprima se le dll sono di versione diversa, anche maggiore, mi va in eccezione. Se la versione è uguale, 80% delle volte con vista da problemi: o non mi accetta il codice di registrazione, o mi da errori strani che sono palese segno di incompatibilità.

Quindi ho pensato che se riesco a referenziare da codice, non ho il vincolo della versione che mi si presenta adesso.
Giorgio

Non si finisce mai di imparare!!

freeteo Profilo | Guru

ciao,
ma il tuo problema è nel tuo pc quando lanci il programma a debug o nella macchina dove vai a distribuire il pacchetto?
Perchè se fosse un problema di qualche altro pc, potresti provare ad installare sulla macchina il runtime di Crystal di una versione successiva, e distribuire solo il tuo exe.
Potrebbe anche essere che vengano usate le lib installate più di recente...non saprei però sono tentivi da fare su cui io cmq dubito...

Cmq il 2002 mi sembra 1po troppo vecchia come versione...come dicono anche qui non c'e' supporto per vista:
http://msdn.microsoft.com/en-us/vs2005/aa948853.aspx
"....The changes impact Visual Studio and thus we're unable to support Visual Studio .NET 2002 or Visual Studio .NET 2003 on Windows Vista...."
quindi i tuoi problemi potrebbero essere risolti nelle versioni successive.
Al momento non saprei come aiutarti, se non di consigliarti un porting a .net 2.0 quanto meno...


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

giorgiodipietro Profilo | Junior Member

Lo so che dovrei passare almeno al 2.0, ma è un programma di tre anni di lavoro e la cosa sarebbe un po' complicatina.

Non capisco però perchè senza anteprima funziona, e con l'anteprima no..
Giorgio

Non si finisce mai di imparare!!

freeteo Profilo | Guru

>Lo so che dovrei passare almeno al 2.0, ma è un programma di
>tre anni di lavoro e la cosa sarebbe un po' complicatina.
ok capisco...anche se prima o poi ti toccherà se devi lavorarci su purtroppo è così


>Non capisco però perchè senza anteprima funziona, e con l'anteprima
>no..
non saprei...sicuramente il viewer usa il device video e il motore grafico...ma ti faccio qualche altra domanda:
- il problema ce l'hai solo su vista? su xp ad esempio funziona correttamente?
- hai provato a disabilitare i themi grafici di vista, magari Aero e vedere se cambia qualcosa? o cambiare la compatibilità dell'exe magari...
- hai grafici o altre cose "puramente grafiche" ? se visualizzi solo dei testi semplici ti da lo stesso errore?
- a che punto del codice da l'errore, appena parte, appena viene visualizzato, quando?
- posta il messaggio di errore così magari qualche altra ipotesi può venire in mente...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

AndreaKpr Profilo | Senior Member


Ciao.
Concordo con tutti quanti che sarebbe ideale effettuare il porting almeno alla 2.0.
Se hai diviso il tuo applicativo in + progetti, potresti provare a convertire solo il progetto del motore di stampe...

Detto questo volevo comunicare un'esperienza simile in quanto ad incompatibilità di versioni.
Premessa che non ho mai usato gli oggettini che vi sono nella ToolBox, ma mi sono sempre fatto tutto a mano.
Nel senso che referziavo le dll e creavo gli oggetti al volo, anche perchè effettuavo 'l'imposta posizione' delle tabelle
prima di effettare l'anteprima del report.
Ai tempi Il mio applicativo 1.1 usava il Cr9, dal cliente vi era installato un applicativo di terze parti che usava il cr8.
Ovviamente l'ultimo che installava comandava la versione.
Sono riuscito a risolvere la situazione copiando nella root dell'applicativo le dll in uso dallo stesso.
Del tipo che nella directory dell'applicativo terze parti ho copiato le dll di cr8 e ho lasciato nella system32 le dll del cr9.
Tutto magicamente funzionò... credo che win prima cerca nella directory stessa e poi dove ha registrato il componente.

Non so se fa al caso tuo... Ovviamente con Xp, vista non so...

Brainkiller Profilo | Guru

>Ovviamente l'ultimo che installava comandava la versione.
>Sono riuscito a risolvere la situazione copiando nella root dell'applicativo
>le dll in uso dallo stesso.

Infatti in genere si pone questo problema. Se si hanno limiti di budget e non si possono upgradare enne licenze di Crystal Report o di software analogo si consiglia sempre o di scegliere un reporting remoto e non locale basato su web ASP.NET/PHP anche se richiede più tempo ed è meno potente di software ad-hoc come il sopra citato Crystal. Oppure usare sempre in remoto soluzioni già pronte di reportistica come appunto il Crystal o i SQL Reporting Services (quest'ultimo ha infatti il Report Server). Chiaro che per generare report così bisogna trovare un moetodo efficace per trasmettere i dati dal client al generatore di Report. Se un software così è installato su PC di agenti che viaggiano e che quindi potrebbero dover generare report ma sono sconnessi dalla rete, la scelta che rimane è di installare Crystal anche sul client e quindi però di allineare le versioni.

>Tutto magicamente funzionò... credo che win prima cerca nella
>directory stessa e poi dove ha registrato il componente.

Sei stato fortunato.

Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

AndreaKpr Profilo | Senior Member


Buongiorno
Non c'è dubbio che Reportistica remota risolverebbe il problema delle più versioni installare sul pc ma ne solleva delle altre.
Anche di non poco conto...

>> Tutto magicamente funzionò... credo che win prima cerca nella directory stessa e poi dove ha registrato il componente.
> Sei stato fortunato.

La fortuna aiuta gli Audaci !

Ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5