| |

Fortgeschrittene ProgrammierungMehrere Fragen zu Klassenmodulen | |  | Autor: Philipp13 | Datum: 16.09.06 13:41 |
| Hi @all,
Anmekrung: Die Vorgeschichte muss keiner lesen, nur zur Hintergrundinfo, dass nicht Antworten kommen, die das eigentliche Problem einfach umgehen.
Wenn ich Objektmodule sage, meine ich Klassenmodule.
Ich progge in VB6.
Ich bin jedem dankbar, der nur eins der Probleme 1),2), etc löst.
[Vorgeschichte]
ich habe schon einige Programme programmiert, die über Internet funktionieren.
z.B. BattleSnake, bei dem der User Online spielen, updaten, über den Server Mitspieler suchen und neue Levels runterladen kann. Nur geht das alles über meinen PC (is für mich kein Problem). Da ich in der lage sein möchte, 10 Clients aufzunehmen, habe ich 11 Winsocks (eins davon hört auf dem betreffenden port), ein array mit 10 einträgen zu je 4 vars zum speichern von status, nickname, etc. das ist ziemlich speicherverschwendend, da ich das bei 2 weiteren programmen auch so habe.
Dann habe ich das hier gelesen:
http://www.activevb.de/tutorials/tut_klassen/klassen.html
Und jetzt möchte ich das so machen:
ich mache ein Interface (wie das "ITier" aus dem Tut), das so Funktionen und Ereignisse wie Sende, Empfange, ÄndereStatus, etc. bereitstellt.
Wenn nun ein Client verbindet, muss er sich einloggen, z.b. mit aa123.
Die 123 bedeutet nun, dass der Client ein BattleSnake Updater ist. Also lädt er eine Klasse von clsBSNUpdater, und arbeitet dann damit.
Dass würde sicher auch ganz gut funktionieren.
[/Vorgeschichte]
Doch jetzt kommen ein paar Probleme auf:
1) Ich möchte herausfinden, welche Klassenmodule im Projekt drin sind. Es gibt ja VB.Forms oder Global.Forms oder so ähnlich, was eine Auflistung aller Forms ist. Ich habe aber in VB6 keine Möglichkeit gefunden, alle Objektmodule aufzulisten.
Gibt es da eine Möglichkeit??
Ich würde dann beim Programmstart von jedem eine Instanz erstellen, und z.b. den Wert "123" abfragen und in ein Array oder so schreiben, damit ich das Objektmodul später laden kann.
2) Doch dazu muss ich auch eine Art Verweis auf das Objektmodul speichern. Geht das, etwa in der Art:
Public type LoginType
LoginID as integer
zuklassenmodul as ?????
end type
dim logintypes() as logintype
set logintypes(x).zuklassenmodul = clsBSNUpdater
und später:
set servers(x) = NEW logintypes(x).zuklassenmodul
Ist das in der Art möglich???
[Anmerkung]
Ich bin mir bewusst, dass man 1) und 2) durch ausführlicheren Quellcode auch realisieren kann, also:
select case loginIDVonNeuemClient
case 123
set servers(x) = new clsBSNUpdater
...
end select
doch nicht nur ich möchte dieses Programm benutzen und daran programmieren, sondern noch 2 weitere Leute. Und wir alle möchten natürlich nicht auch noch die unterprogramme vom anderen drinhaben. darum wäre es sinnvoll, dass er selber erkennt, wer alles da ist, so dass jeder eine Projektdatei haben kann, in die er seine eigenen Klassenmodule einbindet.
Eine Alternative Lösung wäre auch 3)
[/Anmerkung]
3)
kann ich zur Laufzeit feststellen, ob ein Klassenmodul ins Projekt eingebunden ist?
Falls ja, würde ich einfach alle möglichen absuchen, und falls nicht vorhanden, den betroffenen Eintrag aus der Liste streichen.
4)
Annahme, ich habe ein Klassenmodul clsModul mit dem ereignis EreignisS.
Public Type MeinTyp
ObjVar as clsModul
sonstnowas as string
...
end type
Dim withevents arrServer() as meintyp
Nun möchte ich das Ereignis 'EreignisS abfragen. Geht das in einem array unbestimmter größe aus einem untertyp heraus??
etwa so: Public SUb arrServer.ObjVar_EreignisS(Index as Integer) ?????
Falls dies nicht möglich ist, ist es nur mit dem array möglich?:
Public Sub arrObjVars_EreignisS(INdex as Integer)
Oder wie kann ich sonst an die Ereignisse von Klassenmodulen in einem Array/BEnutzerdefinierten Datentyp rankommen??
Ich bedanke mich für alle Antworten
Viele Grüße
Philipp Keck
ICQ: 248213336
MSN: philipp.keck@t-online.de
www.battlesoft.de.vu |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) sevAniGif (VB/VBA) 
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|