vb mit dll auf object in exe zugreifen

douro

New member
hi,
ich mache grad ein programm in dem ich öfters den fall habe dass ich von einer dll auf ein object in einer exe zugreifen will. das geht natürlich nicht weil das object in der dll nicht dekladiert ist. wie kann ich das managen?
nochmal fall das unverständlich war: ich will:
meine dll:
Code:
class PCM
public shared sub Test()
label1.text =  "Hat funtioniert"
end sub 
end class
die dll hat aber kein label1 sondern die anwendung die auf sie zugreift...
wie kann ich das managen?
 
Zuletzt bearbeitet:
Du solltest dir mal das Konzept von Funktionsaufrufen und vor allem Rückgabewerten anschauen.

Damit könntest du sowohl das Problem mit der DLL, als auch mit den unterschiedlichen Forms lösen...

 
habs gelesen... hat meine frage aber nicht beantwortet. kannst du mir bitte einfach sagen, was ich machen muss(fall dus weißt) weil außer der seite schaff ich das nicht.. das mit den unterschiedlichen Forms habe ich gelöst
 
Naja, du rufst ja irgendwo das sub auf (aus der exe vermutlich?). Da könntest du den Text, der hinterher auf dem Label angezeigt werden soll als Rückgabewert angeben, und dann in der .exe setzen.

also sowas (ich kann kein vb, also muss nich unbedingt funktionieren so!):

.exe:
[...]
dim str as String
str=PCM.Test()
label1.text=str
[...]


.dll
function Test() as String
return "hat funktioniert"
end

Das bietet sich an, wenn du nur ein Element ändern willst.

Ansonsten könntest du auch versuchen, das Form selber als Parameter (mit ByRef) an Test() zu übergeben und dann direkt drauf zuzugreifen. Der Aufruf wäre dann wohl sowas wie PCM.Test(this).
Wie das in VB aussehen sollte, kann ich dir leider nicht sagen, ich programmier in .net nur mit c#.
 
danke für die mühe aber das wusste ich schon das hat meine frage nicht getroffen. ich beschreibe es nochmal ein bisschen ausführlicher:
ich will eine fuktion(oder ein sub) in eine dll machen die zb. textbox.text,textbox5.text,label1.text.button1.show usw. beinhaltet, das ich in der exe nur schreiben muss meinedll.oberflächenwechsel("o.3") und dann alle objecte >>>aus der exe von der dll aus verändert werden<<<. mein problem ist halt das diese objekte nicht in der dll dekladiert sind und das ein syntaxfehler ist. sie sind aber in der exe dekladiert, die auf die funktion(oder sub) zugreifen wird.
 
Hatte ich schon verstanden, nur so ohne weiteres wird das nicht gehen... du musst ja irgendwie das Form in der dll bekannt machen, oder eben nicht direkt drauf zugreifen.

Versuch mal, das Form als Parameter an die Sub zu übergeben (mit ByRef), dann solltest du in dem sub drauf zugreifen können.
 
ehrlich gesagt verstehe ich nicht was du meinst.. wenn ich der form sage sie soll sich selber als parameter übergeben(ich weiß gar nicht wie das gehen soll) weiß die dll (die dann ja schon geschrieben sein muss) zu dem schreibzeitpunkt ja trotzdem nicht was label1 ist. ich muss in der dll irgendwie schreiben das das form was auf sie zugreift weiß was das ist
 
Das ist genau der Punkt, wo ich bei VB nicht weiss, wie man das hinschreiben muss...
Bei C# kannst du eine Klasse im gleichen Projekt einfach als Typ für eine Variable/Parameter verwenden (vorrausgesetzt, sie ist public).

Das gleiche sollte in VB auch irgendwie gehen, ich versuch mal, das halbwegs zu erklären (ist kein funktionsfähiger code, aber die grundidee wird hoffentlich klar):

Code:
public class form1 {
 label label1;
 button button1;

 button1click(...){
  dll.test(this);
 }
}


public class dll {
 test(form1 meinform){
  meinform.label1.text="test";
 }
}

form1 wäre da der Klassenname, der als Typ für die Variable meinform verwendet wird. Beim Aufruf gibt das Form dann sich selbst (this) mit, damit "weiss" die Funktion in der DLL, welches form gemeint ist, und man kann über meinform.label1 auf das Label zugreifen.
 
Í ?

stimmt.. da hab ich ein problem... ich weiß nicht ob man bei vb ne form als parameter definieren kann. das mit den this würde ja nochgehen
 
ich habe die lösung. sie ist unten auf dieser seite:
es muss so sein
...sub test(form as system.windows.forms.form)
das problem ist das in vb2010 nach system nicht windows kommt also geht das nicht. und die System.Windows.Forms.dll die man dafür braucht gibt es nicht..

nun ich habe das nie so wirklich mit vb2008/10 usw und vb.net begriffen aber ich dachte mir das ist wohl so ziemlich das gleiche und dload mal vb.net. nun das programm gibt es irgendwie nicht-.- kann mir da wer nene vb.net downloadlink schicken oder mich aufklären?
 
Ich würd vb2008 nehmen, das 10er stellt wieder alles auf den Kopf...
vb.net müsste deutlich älter sein, das ist vb7.
Die neueren verwenden auch .net, aber heissen wieder wie das VisualStudio selbst, VS2005/2008/2010.

Das Problem was du grad hast, kommt aber von wo anders:
System.Windows.Forms.Form ist die Grundklasse für alle Forms. Du brauchst aber nicht die Grundklasse, sondern genau die eine Klasse, die dein Form beschreibt.
Die heisst dann eben Form1, und ist nicht in System.Windows.Forms, sondern in deinem Projekt-Namespace. Innerhalb von diesem Projekt solltest du eigentlich direkt Form1 als Typ verwenden können (also sub test(form as Form1) ).
 
wenn ich in der exe sub(form as form1) mache geht das aber die dll kennt das nicht auch nicht bei vb08.


ich habe nochmal dein post gelsesn::

ich bin nicht innerhalb des projektes.. in der form geht das glaub ich aber ich MUSS das außerhalb schaffen:/
 
Zuletzt bearbeitet:
für alle die das nicht lesen wollen
das was die dll machen soll würde innerhalb des projektes so aussehen
class meinedll
public shared sub labelchange(byval form as form1)
form.label1.text="funktioniert!"
end sub
wie mach ich das mit form as form1, wenn die dll nur später als verweis hinzugefügt wird?
 

Online-Statistiken

Zurzeit aktive Mitglieder
1
Zurzeit aktive Gäste
41
Besucher gesamt
42

Beliebte Forum-Themen

Zurück
Oben Unten