Gå til innhold

DLL Forandre globaler i et vb.net program?


Anbefalte innlegg

Videoannonse
Annonse

Jeg syntes ikek det hørtes noe rart ut i det hele tatt jeg.

For eksempel:

- En Login DLL som endrer de globale database orienterte variablene

- ADB løsninger der f.eks. Faktura er en egen DLL som endrer forrige brukte fakturanr

- Et spill som endrer en global verdi som forteller andre biter av spillet om hendelser

etc. etc. etc

 

Det jeg derimot synes er rart er heller - finnes det noen god grunn til å ha globale variabler i det hele tatt når parameter overføring er referanse basert?

Lenke til kommentar

Høres ut som om du er interresert i et plug-in system.

 

Måten å gjøre dette på, er at du lager et interface som spesifiserer alle funksjoner som et plug-in modul må implementere.

 

Deretter bruker du System.Reflection.Assembly til å laste dll-filen.

 

Du kan f.eks. spesifisere at prosjektet har en Dictionary som inneholder programinstillinger, som dll-en kan endre.

 

DLL (må legge til referanse til .exe filen)

public SamplePlugin : IPlugin
{
 public string Name { get { return "Sample Plugin"; } }

 public void InitLibrary(IProjectSettings project)
 {
if(!project.ApplicationSettings.ContainsKey("LoadedPlugins"))
  project.ApplicationSettings.Add("LoadedPlugins", "");
project.ApplicationSettings["LoadedPlugins"] += this.Name + "\n";
 }
}

 

// Her definerer vi interfaces som skal brukes i pluginen og programmet

public interface IProjectSettings
{
 public Dictionary<string, string> ApplicationSettings { get; }
}

public interface IPlugin
{
 string Name { get; }
 void InitLibrary(IProjectSettings project);
}

public class ThisProject : IProjectSettings
{
 private Dictionary<string, string> m_dict; // Inneholder prosjektinstillinger

 // Lister assemblies og plugin objekter
 private List<System.Reflection.Assembly> m_assemblies;
 private List<IPlugin> m_plugin_objects;

 public Dictionary<string, string> ApplicationSettings { get { return m_dict; } }

 public void LoadLibrary(string dllname)
 {
// Last dll-filen
System.Reflection.Assembly asm = System.Reflection.Assembly.Load(dllname);
// Hent alle typer definert i dll-en
Type[] types = asm.GetTypes();

foreach(Type t in types)
{
  // Sjekk om object
  if(t.GetInterface("IPlugin") != null)
  {
	IPlugin plug = Activator.CreateInstance(t) as IPlugin;
	plug.InitLibrary(this as IProjectSettings);
	m_plugin_objects.Add(plug);
  }
}
m_assemblies.Add(asm);
 }
}

 

(utestet)

 

edit: teit av meg å skrive C# i et VB forum....

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...