Hallo, Meine Aufgabe umfasst 2 Geräte, eines sendet per USB eines per COM Port. Wenn die Geräte senden muss ich etwas tun. Ich brauche also eine Windowsmessage, die ich mit VB abfangen kann. Wer hat damit Erfahrung und kann mir Anhaltspunkte liefern? Grüße, Johannes
So weit so gut. Bisher denke ich über zwei varianten nach: a) mit einem MAPI Hook die WM_Devicechange abfangen und mit DBT_Devicespecific oder DBT_Userdefined ein senden der seriellen Schnittstelle feststellen. b) mit einen eigenen Task dauer abfragen und ... z.B. eine Funktion in einem anderen VBA-Task ausführen, Variablen an andere Tasks übergeben oder eine eigene WM abschicken. Bei beiden Varianten stehe ich vor dem Problem dass ich damit nie etwas zu tun hatte.
OK, ich habe mich für die multithread variante entschieden. Ich habe code geschrieben, aber immer noch Probleme damit. Der testcode ist ohne serielle schnittstelle. Es geht nur darum mit parallelen Tasks in eine textbox zu schreiben.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
Probleme macht diese Zeile:
1 | |
Mit der Zeile erscheint der Error 7 Nicht genug speicher Löscht man sie, läuft der Programmcode problemlos ab. Ersetzt man sie mit
1 | |
so werden alle Threads gestartet, stürzen aber nach ein paar weggeklickten MsgBoxen ab, und nehmen das Programm mit sich. Meine Frage: Was ist los? Danke, Johannes
Gast
#538565
Eine WindowsAPI funktion einfach die Adresse einer internen! Basic Sub zu geben, auf die Idee muß man erst mal kommen. Wo hast du das her? Ich finde es interessant das das überhaupt geht. Probleme bekommst du weil du aus einem anderen Thread völlig unkontrolliert einfach auf Elemente zugreifst die dir nicht gehören und du niemand anders davon informierst. Deswegen kracht es irgendwann. Sollte es VB6 sein , VB6 unterstützt nur Singlethreadapartments. Nimm VB. Net und nutze die Threadunterstützung des Frameworks.
Ich hab mich ein bisschen eingelesen und das war meine erste Schätzung. Leider bin ich an VBA gebunden. Ich habe etwas von Appartments und Marshalling gelesen, aber noch nicht wirklich Ahnung davon. Kann ich meinen Absturz verhindern wenn ich Events werfe? Wie funktioniert das mit Events werfen?
Übergaben per Event, wie funktionieren die? Ich habe jetzt ein Klassenmodul namens multiclass
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
In einem Modul habe ich dann folgendes formuliert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Die Zeiele
1 | |
führt zu einem Compilerfehler. Und ich glaube auch die Zeile
1 | |
2 | |
3 | |
macht so noch keinen Sinn. Insbesondere fehlt auch irgendwo noch ein
1 | |
Kann jemand meine Verwirrung auflösen?
So, Nachrichten Werfen geht jetzt: multiclass-Objekt
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Hauptteil
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Jetzt habe ich nur noch ein Problem das mymultiobject als eigenen thread starten zu lassen. Der Auskommentierte Teil ist mein Gedanke, der allerdings nicht zum Ziel führt. Unzulässige verwendung von AdressOf.
Gast
#541099
VBA == Visual Basic for Applications Schreibst du das in Excel/Word ??? Hast du irgendwo die Aussage gefunden, daß VBA threadsicher ist??? Warum versuchst du das so riskant zu gestalten? Ich sage nicht das es nicht geht, aber ich weiß, das es nicht immer gehen wird und dann kracht es gewaltig. Mach das mit eigenen ActiveX Objekten und vergiß dieses Createthread. http://www.freevbcode.com/ShowCode.Asp?ID=1287 <- lies dir das mal durch >Meine Aufgabe umfasst 2 Geräte, eines sendet per USB eines per COM Port. >Wenn die Geräte senden muss ich etwas tun. Da würde ich mir 2 ActiveX Objekte schreiben, die den Empfang und die Protokollauswertung machen und per Event an das Hauptprogramm bescheid sagen. Die ActiveX Objekte kannst du in VB.Net schreiben. Nicht vergessen die COM-Sichtbarkeit anzuschalten. Da hast du vollen Threadsupport, wenn es überhaupt nötig ist. Vieles geht mit Timer. Die Objekte registrieren und in VBA einbinden.
Gast
#541104
Übrigens:
>threadhandle = CreateThread(ByVal 0&, 2000, AddressOf mymultiobject, ByVal >0&,
ByVal 0, ByVal 0&)
Createthread erwartet die Adresse einer Funktion nicht eines Objekts.
Sei froh das deine Programmiersprache dich hindert sowas auszuführen.
Daten lassen sich auch als Programmcode interpretieren. Da die Adresse
deinem Programm gehört wird Windows ihn auch nicht davon abhalten.
Der Grund warum ich das möchte ist folgender: Ich muss eine Art OnCOM Event benutzen. Verwenden darf ich alles was in VBA-ExCel 6.0 zur Verfügung steht. Meine Überlegung war einen Thread laufen zu lassen, der das Event generiert. VBA threadsicher -> Nein, diese Aussage habe ich nicht gefunden. Aber mein Thread soll als einziger auf den InBuffer zugreifen, und verschickt gegebenenfalls ein Event. Da sollten keine Konflikte auftreten. Übersehe ich da etwas? ActiveX -> Welche Objekte stehen mir standardmäßig zur Verfügung? Ich kenne mich damit nicht so wirklich aus. Wie ich das sehe müsste ich eine EXE kompilieren, und diese beifügen. Diese Option steht mir nicht zur Verfügung. Anforderung ist: Alles in einer Datei. Vieles geht mit Timer -> Davon habe ich gelesen, aber mich noch nicht beschäftigt. Da der Eingabepuffer ja ein Puffer ist, könnte ich auf Echtzeit vermutlich verzichten. Ich habe ca. 8 byte Puffergröße, da könnte ich vermutlich auch sequentiell ran. VB.NET -> Steht mir leider nicht zur Verfügung. Wenn es absolut nicht geht, kann ich eventuell nochmal verhandeln. Wäre aber eher schlecht für mich. http://www.freevbcode.com/ShowCode.Asp?ID=1287 -> Dies habe ich bereits gelesen, ich lese es jetzt nochmal. Ich glaube ich bin nicht erfahren genug um das gesamte modell auf einmal zu verstehen. Aus verschiedenen Quellen habe ich bereits herausgefunden, dass: -Ich ein MTA möchte -Ich zuerst CoInitialise(Ex) ausführen muss -(L)RCP wichtig sein könnte -COINIT der Appartmenttyp its, und ich den Typ Coinit_Multithreaded möchte Ich glaube dass ich das ganze insgesamt allerdings noch nicht verstanden habe.
Ich möchte durch dieses neue Post mein vorheriges nicht als unwichtig erklären, deshalb seht dieses bitte als Fortsetzung des vorherigen. Seit dem erstenmal lesen von http://www.freevbcode.com/ShowCode.Asp?ID=1287 bin ich wohl schon ein bisschen tiefer in der Materie, und habe tatsächlich mehr verstanden. Mir brennen Fragen auf den Lippen, die wichtigste ist: -wofür brauche ich hier im speziellen die GUID? Grüße, und Dank im Vorraus
Gast
#541738
>ActiveX -> Welche Objekte stehen mir standardmäßig zur Verfügung? Ich >kenne mich damit nicht so wirklich aus. Wie ich das sehe müsste ich eine >EXE kompilieren, und diese beifügen. Diese Option steht mir nicht zur >Verfügung. Anforderung ist: Alles in einer Datei. So wie ich dich verstehe benutzt du excel. Das wird also mit sicherheit keine EXE netstehen. Du beantwortest die wichtigste Frage nicht. Hast du 2 serielle Schnittstellen? Ist das USB-Gerät auch eine virtuelle serielle Schnittstelle? Wenn ja, benutze MSCOMM das ist als COM-Object bei VB6 dabei und in der VB Runtime redistributable enthalten. Das wird auf dem Rechner installiert und dann kann es auch deine Excelapplikation benutzen. Es generiert auch OnCOM Events. Damit läßt sich das ganze Threadzeug umgehen.
Ja, ich benutze ExCel. Ja, ich habe 2 Serielle schnittstellen. Eine der beiden ist Virtuell (USB) Randnotiz, die USB-Entscheidung ist erst kürzlich gefallen. Eine MSCOMM Lizenz liegt nicht vor. MSCOMM muss umgangen werden - deshalb der Terz mit den Threads.
Gast
#541814
MSCOMM ist frei verfügbar in der VB Runtime Redistributable. Die kannst du bei Microsoft runterladen
So, mittlerweile stürzt mein Mutlithread nicht mehr ab. Alles was man beachten muss ist dass sich die threads vor dem Hauptprogramm beenden. Wenn ich das ganze jetzt noch auf Messages erweitere, sollte ich glücklich sein. Leider kann ich Messages nur in einem Klassenmodul deklarieren, wodurch ich brobleme bekomme, wenn ich "AddressOf Objekt" verwenden will. Ich möchte ja nicht uneinsichtig wirken, aber ich sehe keine andere Möglichkeit für mich. in einem Modul:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
im Hauptteil
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
MSCOMM ist frei verfügbar -> hatte ich überlesen. Also gut, dann seh ichs mir nochmal an :)
OK. die MSCOMM scheint die richtige Wahl für mich zu sein. Wie kann ich sie einbinden ohne: -Das Objekt in eine Form zu setzen. -Eine Lizenz auf jedem Rechner installieren zu müssen. Am Ende hätte ich gerne alle Dateien in einem Verzeichnid, darum wäre es schön wenn ich nicht auf das Windowsverzeichnis zurückgreifen müsste. Grüße, Johannes P.S. Ist es angebracht einen neuen thread zu starten?
Gast
#543479
>Wie kann ich sie einbinden ohne: >-Das Objekt in eine Form zu setzen. Das sind VB Grundlagen, lies dir das in einem Buch durch. >Eine Lizenz auf jedem Rechner installieren zu müssen. Wieso Lizenz, das einzige was du machen mußt ist die dll mitzuliefern und auf dem Rechner zu registrieren (mit regsvr32).
>>Wie kann ich sie einbinden ohne: >>-Das Objekt in eine Form zu setzen. >Das sind VB Grundlagen, lies dir das in einem Buch durch. Ich mache fast nichts anderes als mich in vb einzuarbeiten. -Wäre es in einer DLL, dann könnte ich mit DECLARE... arbeiten. -Wäre es in einer CTL, dann könnte ich evtl mit CreateObject... arbeiten -Diese Methode: http://www.the-starbearer.de/Praxis/ElektronikamPC/RS232/MSCOMM.htm möchte ich nicht verwenden. Der benutzer muss dann auf jedem weiteren Rechner diverse schritte unternehmen. >>Eine Lizenz auf jedem Rechner installieren zu müssen. >Wieso Lizenz, das einzige was du machen mußt ist die dll mitzuliefern >und auf dem Rechner zu registrieren (mit regsvr32). MSCOMM braucht eine Lizenz um auf dem jeweiligem Rechner zu laufen. Das ist im Grunde nur ein Registry eintrag. Auf VB.NET kann man etwas in Richtung:
1 | |
schreiben um sich den Terz zu sparen. Probleme in der Anwendung wird alles bereiten was der User tun muss. Ein Objekt ins ExCel Sheet zu platzieren kommt bei Dieser Anwendung leider nicht in Frage. Die Anforderung an den User soll sein: "Kopiere diesen Ordner auf den Computer Deiner Wahl und mache einen Doppelklick auf die ExCel-datei." Ich glaube nicht, dass das registrieren einer Lizenz und das erstellen eines Objekts aus einer OCX wirklich zu den Grundlagen gehrört, gerade weil die OnCom Events genutzt werden müssen. Klar bleib ich dran, ich habe noch bis mitte Juni Zeit :)
Tip: Online-Hilfe nach "Controls dynamisch erstellen" absuchen. Da müßte dann beschrieben sein, wie man das macht. Ich bin zu lange raus aus VB, ich habs vergessen :( OT: Kuriboh ist aber ein sehr schwaches Monster... ;-)
Gast
#543677
Ich weiß nicht was du liest, ich vermute hauptsächlich Internet Tutorials. Zum einen sind die wesentlich fehlerhafter und meist sehr speziell. Das Problem dabei wenn man mehr als Copy und Paste machen will, hat man ein Problem weil man es nicht begreift. Du scheinst noch dazu irgendwas zu lesen was die Angelegenheit wesentlich komplizierter darstellt als sie ist. Deshalb der Tip lies ein Buch. Bitte sprich nicht mehr von Lizenz sondern von Objekt oder Control. Der eigenliche Witz ist du erwähnst sogar die Lösung zum dynamischen Erzeugen von Objekten (CreateObjekt) anscheinend fehlt dir da aber Wissen.( deshalb Buch) Das Control muß nicht unbedingt registriert werden, es wird aber problemloser wenn es registriert ist. Dein Doppelclickwunsch wird nichts, da in den meisten Fällen die Sicherheitseinstellungen von Excel das verhindern werden.
>"Controls dynamisch erstellen" Alles was mit kompilieren zu tun hat darf ich nicht. >ich vermute hauptsächlich Internet Tutorials Richtig. Ich habe gehofft meine c++ kenntnisse würden mir über das gröbste hinweg helfen. Ein Buch habe ich dann doch noch: Excel VBA von Monika Weber. Dieses Buch ist allerdings für meine Zwecke eher enttäuschend. >Deshalb der Tip lies ein Buch. Ich geh zur Bib. Hast Du einen Buchtipp? >Lizenz sondern von Objekt oder Control Windows spricht von Lizenz. Wenn man das MSCOMM Objekt einbindet, und dann die Module exportiert erhäkt man einen Lizenz Fehler. >Dein Doppelclickwunsch wird nichts, da in den meisten Fällen die Sicherheitseinstellungen von Excel das verhindern werden. Schwerer schlag für mich, aber auch ein leichter Hoffnungsschimmer - in den meisten Fällen. >OT: Kuriboh ist aber ein sehr schwaches Monster... ;-) OT: Englisches understatement
Johannes H. wrote: >>"Controls dynamisch erstellen" > Alles was mit kompilieren zu tun hat darf ich nicht. > Hat es nicht, also darfst du das ;). "Dynamisch erstellen" bedeutet "zur Laufzeit erzeugen" - und dementsprechend es auch wieder zur Laufzeit zerstören, wenn man es nicht mehr benötigt. Dafür braucht man keinen Compiler, das geht auch mit Interpretern wie Excel-VBA. CreateObject heißt der Befehl übrigens...
Gast
#546027
>Richtig. Ich habe gehofft meine c++ kenntnisse würden mir über das >gröbste hinweg helfen. Das erklärt endlich warum du das so "umständlich" versuchst. In C++ mußt du dich um "alles" kümmern (auch um Sachen die dich eigentlich bei der Lösung deines Problems gar nicht interessieren). In VB mußt du das nicht. Denke Eventbasiert, entwerfe das ganze als Statusengine und schreibe es einfach hin. Wenn du in C++ schonmal mit COM zu tun hattest, sollte das alles kein Problem sein. Buchtip?: Im Moment keinen, mir haben meine VB Kenntnisse gereicht MSDN und ein kleines Büchlein zu VBA um bei den Objekten Ahnung zu haben was geht und Suchbegriffe für die MSDN. Ich kenne zwar dein Buch nicht, aber nach meiner Meinung sollte es vollkommen ausreichend sein, sonnst nimm noch irgendein VB-Buch das über das ziehen von Bunten Bilder in Forms hinausgeht. >erhäkt Was ist das?
>Denke Eventbasiert, entwerfe das ganze als Statusengine und schreibe es einfach hin. Ich fürchte hierfür bin ich nicht gut genug >Das erklärt endlich warum du das so "umständlich" versuchst. Ich habe schon gemerkt dass VB mir nicht so liegt wie die c Familie. >Buchtip?: Ich habe mir jetzt ein VB6 Buch geholt. VB 6 Kompendium von Markt und technik. Ein sehr angenehmes Buch. Im wesentlichen werde ich von diesem Buch bestätigt. 1.MSCOMM32.ocx nach System32 kopieren 2.mit regsvr32 die Klassen registrieren 3.den Lizenzschlüssel in die Registry eintragen 4.Klasse verwenden
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
Was hier nun noch fehlt: -TRY-Block um das copy herum -regsvr32 auf silent umstellen -Lizenzschlüssel eintragen -Klasse verwenden Ich denke mein CreateObjekt Aufruf ist falsch, weil er sich nicht nch den Klassen in der registry richtet. Zunächst arbeite ich aber noch am sauberen registrieren in der Registry. OT: erhäkt ist erhält, wenn man beim 10-Fingern daneben greift und es nicht merkt :)
Gast
#546078
>3.den Lizenzschlüssel in die Registry eintragen das macht regsvr32 >4.Klasse verwenden Nein, sauber ist klasse erstellen und kontrollieren ob sie erstellt werden konnte, DANN erst verwenden Netter Quellcode den du da postest ist der von 1996 oder von "lernunwilligen" ? Und jetzt mal etwas realer: seit winnt (1996?) gibt es Rechte und Beschränkungen aus gutem Grund 1. regsvr32 kann normalerweise (spätestens ab win2000) nur der Administrator zur Registrierung eines Objektes benutzen 2. Eine normale exceldatei mit Macros (nichts anderes ist dein Code) sollte vom Administrator nicht ausgeführt werden, sondern nur von Nutzern mit eingeschränkten Rechten. 3. Ein normaler Nutzer sollte nicht einfach etwas nach System32 kopieren Das sind Sicherheitskonzepte die ihre Berechtigung haben und auch nicht umgangen werden sollten! Ein Nutzer der diese Konzepte aufhebt wegen eines Excelmakros....
>3.den Lizenzschlüssel in die Registry eintragen das macht regsvr32 Ach, das geht auch? Ich kann damir nur die Klase eintragen. HKEY_CLASSES_ROOT\Licenses\ erfolgt kein Eintrag >>4.Klasse verwenden >Nein, sauber ist klasse erstellen und kontrollieren ob sie erstellt werden konnte, DANN erst verwenden Ich hatte nur abgekürzt, weil die klasse noch Zukunftsmusik ist. >Netter Quellcode den du da postest ist der von 1996 oder von >"lernunwilligen" ? Er ist von mir, die Buchtitel sind mir nicht bekannt. >Und jetzt mal etwas realer: >seit winnt (1996?) gibt es Rechte und Beschränkungen aus gutem Grund >1. regsvr32 kann normalerweise (spätestens ab win2000) nur der >Administrator zur Registrierung eines Objektes benutzen >2. Eine normale exceldatei mit Macros (nichts anderes ist dein Code) >sollte vom Administrator nicht ausgeführt werden, sondern nur von >Nutzern mit eingeschränkten Rechten. >3. Ein normaler Nutzer sollte nicht einfach etwas nach System32 kopieren >Das sind Sicherheitskonzepte die ihre Berechtigung haben und auch nicht >umgangen werden sollten! Ein Nutzer der diese Konzepte aufhebt wegen >eines Excelmakros.... Es handelt sich um Laborrechner, die vom Firmennetzwerk geschützt werden. Sie laufen im Admin-Mode, soweit ich das beurteilen kann. Ich werde das nochmals überprüfen. Das Konzept ist fehlerhaft wenn es mich im Ausüben meiner tätigkeit behindert. Was nutzt mir eine Programmiersprache in der ihc nicht programmieren darf? Am liebsten würde ich nicht mit der Registry hantieren, oder etwas in System32 kopieren. Aber mir bleibt keine andere Wahl - meine Arbeit unterliegt einschränkungen die ich nicht ändern kann. Das Threading modell wäre eine Tolle möglichkeit gewesen, aber offensichtlich kann man es nciht verwenden. Ich MUSS mit der MSCOMM.OCX arbeiten, leider macht diese es erforderlich einträge in der Registry zu tätigen. MSCOMM ist nicht überall installiert, und jeder DAU muss mit einem Doppelklick das Programm zum laufen bringen. Noch viel schlimmer, jeder DAU soll es auf eine Diskette kopieren können und es an einen anderen Rechner schleppen, wo er es auch mit einem Doppelklick verwenden kann, ohne zusätzlichen Aufwand - zu dem ein IT-Support nötig wäre. Gerne mache ich es anders. Aber derzeit sehe ich nur 2 Möglichkeiten: A) Threading zum laufen bringen B) MSCOMM zur Laufzeit registrieren Ich möchte wirklich nicht als lernunwillig erscheinen, ohne heute sitze ich an dem Problem bereits 127 Stunden. Glaub mir, wenn ich einen bequemen Weg sehen würde, ich wäre sofort dabei.
Wenn das so ist... Wenn das CreateObject fehlschlägt, dann das OCX in das Arbeitsmappenverzeichnis kopieren (niemals nach System32) und ein ShellExecute auf ne Stapeldatei ausführen. In der Stapeldatei steht drin "regsvr32 mscomm.ocx". Dann blitzt ein einziges mal (wenn OCX unregged) kurz ein DOS-Fenster auf und das wars. In die Registry wird zum einen der Pfad des OCX vermerkt, zum anderen wird beim Registrieren nicht nur ein Eintrag erstellt - es sind derer etliche. Der CreateObject-Aufruf erwartet eine Zeichenfolge a la "BarControl.GDSControl.1".
Gast
#546212
>Ach, das geht auch? Ich kann damir nur die Klase eintragen. >HKEY_CLASSES_ROOT\Licenses\ erfolgt kein Eintrag nein höchstwahrscheinlich nicht >Das Konzept ist fehlerhaft wenn es mich im Ausüben meiner tätigkeit >behindert. Was nutzt m.... Ich kenne die Problematik aus dem Support im Uni-Bereich. Ich kann dazu nur sagen, ich hoffe ihr habt einen kompetenten Admin und der bekommt mit was ihr da treibt. Mit sowas gefährdet man nicht nur 1.den eigenen Rechner sondern auch 2. alle anderen Rechner. und 2. ist nicht akzeptabel. Ich möchte das nicht mit dir ausdiskutieren (dazu ist dein Admin da) ich weise dich nur darauf hin, das du bei heutigen normalen Sicherheitseinstellungen in Probleme rennst. Zum Konzept: Zur Registrierung ist ein Installationsprogramm da.(kann auch eine Batch datei sein) >an dem Problem bereits 127 Stunden ??? Was hast du in den 127 Stunden getan? Ohne dich beleidigen zu wollen: Du postest hier Code wo du mit VB-Systemprogrammierung spielst auf einem extremen Niveau. Ich habe schon in C++ COM-Server geschrieben und in VB auch schon einiges gemacht. Ich muß ehrlich sagen, sowas würde ich in VB nicht tun, weil ich mir da nicht sicher wäre ob das stabil geht(Createthread API aufruf und Konsequenzen). MSCOMM ist dazu da, das du das was du machen willst in 2-5 Stunden hinzauberst. Ich hätte erwartet als nächstes ein Einbinden von 2 MSCOMM-Objekten zu sehen mit ein paar Event-Routinen. Stattdessen kurvst du irgendwo in den Abgründen der COM Registrierung rum. Hier nochmals der Rat: Mal dir eine Statemachine auf die von Events abhängt und schreib das einfach in VB runter. Das ist nicht so kompliziert wie in C++. Da wo du jetzt rumkurvst, das wird dir von VB z. T. abgenommen oder es wird erst interessant wenn du das Programm fertig hast und es weitergeben möchtest.
> Wenn das CreateObject fehlschlägt, dann das OCX in das > Arbeitsmappenverzeichnis kopieren (niemals nach System32) ... Warum nicht nach System32? >Der CreateObject-Aufruf erwartet eine Zeichenfolge a la >"BarControl.GDSControl.1". Dachte ich mir, mach ich dann auch so. Thx. >>Ach, das geht auch? Ich kann damir nur die Klase eintragen. >>HKEY_CLASSES_ROOT\Licenses\ erfolgt kein Eintrag >nein höchstwahrscheinlich nicht Dachte ich mir. Ich mache es jetzt über einen silent call von regedit. >>Das Konzept ist fehlerhaft wenn es mich im Ausüben meiner tätigkeit >>behindert. Was nutzt m.... >Ich kenne die Problematik aus dem Support im Uni-Bereich. >Ich kann dazu nur sagen, ich hoffe ihr habt einen kompetenten Admin und >der bekommt mit was ihr da treibt. ... Welche Probleme können in diesem fall auftreten, und mit welchen routinen kann ich ihnen ausweichen? >>Zum Konzept: Zur Registrierung ist ein Installationsprogramm da.(kann auch eine Batch datei sein) In eine Batch Datei würde ich schreiben:
1 | |
2 | |
3 | |
irgendwie entgeht mir warum das anders ist als es in das VBA-Modul
einzubinden.
Natürlich muss das modul checken ob das schon geschehen ist, um höhere
Versionen nicht zu überschreiben.
>Was hast du in den 127 Stunden getan?
Zugegeben, ich hab mich ein bisschen verrannt. zunächst wurde
festgehalten dass ich MSCOMM nicht verwenden darf -> Also wollte ich
über API gehen. Dann kam heraus dass das RS232 gerät auch den Computer
anrufen darf - also brauchte ich ein Event, und habe mich in
Multithreading für Vb eingelesen. Nachdem ich das nicht stabil bekommen
habe arbeite ich jetzt daran MSCOMM so einzubauen dass man es nciht
merkt, und es auch keinen stört.
Aktuelle version des "lernunwilligen von 1996"-Codes1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
Gast
#546243
>>>Das Konzept ist fehlerhaft wenn es mich im Ausüben meiner tätigkeit >>>behindert. Was nutzt m.... >>Ich kenne die Problematik aus dem Support im Uni-Bereich. >>Ich kann dazu nur sagen, ich hoffe ihr habt einen kompetenten Admin und >>der bekommt mit was ihr da treibt. ... >Welche Probleme können in diesem fall auftreten, und mit welchen >routinen kann ich ihnen ausweichen? Kommt drauf an wie sauer dein Admin auf dich ist, wenn er herausfindet, daß DU für die gelockerten Sicherheitseinstellungen von Windows und Office verantwortlich bist. Ich schätze wenn es gerade trotz Virenscanner und Firewall einen zerstörerischen ActiveX oder Macrovirenausbruch gab, würde ich als routine zum Ausweichen nur noch rennen empfehlen. Ich weiß ja nicht wo du arbeitest, aber normalerweise ist das so daß Nutzer nur mit eingeschränkten Rechten arbeiten. Deshalb bekommst du Probleme beim Registrieren, es könnte ja auch der neueste ActiveX Virus sein der sich durch eine Sicherheitslücke des IE gerade registrieren will. Wenn ein Programm installiert wird, sollte der Admin informiert sein. Das Programm hat ein Installationsprogramm (in deinem Fall die batchdatei) die registriert MSCOMM.OCX und installiert das Programm in einen Pfad. Dazu werden adminrechte benötigt aber nur bei der Installation. Zum ausführen müssen Makros in Office erlaubt sein, sonst fnktioniert es nicht. Sowas sollte nur mit Rücksprache geändert werden aufgrund der Makrovirenproblematik.
>Wenn ein Programm installiert wird, sollte der Admin informiert sein. >Das Programm hat ein Installationsprogramm (in deinem Fall die >batchdatei) die registriert MSCOMM.OCX und installiert das Programm in einen Pfad. >Dazu werden adminrechte benötigt aber nur bei der Installation. >Zum ausführen müssen Makros in Office erlaubt sein, sonst fnktioniert es >nicht. Sowas sollte nur mit Rücksprache geändert werden aufgrund der >Makrovirenproblematik. Ich bin auf meinem Rechner Admin, die Laborrechner sind IMO auch standardmäßig Admin. Ist aber natürlich ein vernünftiger Einwand. Ich arbeite gerade an der Überprüfung ob die keys bereits angelegt sind. Sobald ich damit fertig bin überprüfe ich ob der Rechner bereits als admin läuft, tut er das nicht, fordere ich das Passwort und verwende RUNAS in der shell. Dann muss man den admin rufen -> ich bin aus dem Schneider :) >Das geht ja hier richtig farbig... OT: Hat mich auch schon begeistert :)
Gast
#546253
Was mich wundert ist, daß du dich mit den Installationsproblemen herumschlägst. Hast du den Rest schon geschrieben?
Parallel baue ich noch das gerät, dass dann communiziert. Ich kann also noch gar keine Details programmieren. Ich warte noch auf Platinen, dann gehts los :) Außerdem gibt es eine Vorversion, an der insbesondere dieses problem beanstandet wurde. Die Kommunikation selbst ist dann leicht, das hatte ich wirklich in einer Stunde fertig. Ich habe mit einem Kraftmeter herumgespielt - war einfach.
Gast
#546258
>Ist aber natürlich ein vernünftiger Einwand.
Es gibt noch einen Grund (außer kein Ärger mit Admin)
unterschätze nicht die mögliche Laufzeit deines Programmes.
An der Uni hatte ich eines (2000) das war noch für Turbopascal 3.0 aus
für einen CP/M(anno 1985?) Rechner.
Trenne installation und Programm, da zu erwarten ist, daß die Rechte
eines Nutzers aus Sicherheitsgründen weiter eingeschränkt werden.( Von
Admin/Betriebssystem/SP)
Das Konzept installation mit adminrechten, ausführen mit Nutzerrechten
dürfte sich da besser einfügen.
Gast
#546259
>Parallel baue ich noch das gerät, dass dann communiziert. >Ich kann also noch gar keine Details programmieren. Ich schätze auf dem Gerät in C. Programmiere es doch auf einem 2. PC, da kannst du schon weitermachen und beide Seiten testen. Nebenbei wird der Code plattformunabhängiger.
>Programmiere es doch auf einem 2. PC, da kannst du schon weitermachen
Gute Idee,... mach ich wahrscheinlich
Der Code um MSCOMM einzubinden ist soweit fertig. Jetzt muss ich nur
noch klasse erstellen, kontrollieren, verwenden.
Administrator@Domäne müsste man anpassen, ist aber im Firmennetzwerk mit
übergreifender Domäne unkritisch.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
Gast
#549821
Hi, bin durch Zufall hier vorbei gekommen... Du hast zwei serielle Schnittstellen und wenn auf den Schnittstellen sich was tut, musst DU also was machen. - hmm - Wenn sich WAS tut, musst Du WAS machen? Wenn Daten einfliegen, diese speichern (im ExcelBlatt oder in einer Datei)? Oder was ganz anderes? Denn Funktionen in VBA, welche auf die serielle Schnittstelle zugreifen können, kann man sehr gut auch ohne MSCOMM uswusf. realisieren. Ob das jetzt was nützt, weiss ich nicht, Du kannst Dir den Link ja mal ansehen Beitrag "Re: benötige Hilfe zu Excel Makro" Das hantieren mit eventmessages auf "Layer Null" erscheint mir allerdings auch zu riskant. Aber vielleicht gehts es ja nicht anders. Viel Erfolg AxelR.
Ich hoff, ich darf mal ne kurze Frage zwischendurch stellen. Ich arbeite mit VB.Net und will auf eine Chipkarte zugreifen... diese steckt in einem Kartenleser der an einem USB-Port steckt... aber ich weiß nicht mal wie ich mittels VB.net auf diesen Kartenleser zugreifen kann... Könnt ihr mir helfen und sagen, wie ich den USB-Port am besten anspreche?
Mittlerweile funktioniert das mit MSCOM wirklich gut. >Wenn sich WAS tut, musst Du WAS machen? >Wenn Daten einfliegen, diese speichern (im ExcelBlatt oder in einer Datei)? >Oder was ganz anderes? Wenn sich egal was tut, muss ich egal was machen :) Was ich wann tue ist imo recht schnuppe. Im Detail sendet das Gerät einen String, der dann aufgeschlüsselt werden muss, und je nach string muss anders reagiert werden. >Denn Funktionen in VBA, welche auf die serielle Schnittstelle zugreifen können, kann man sehr gut auch ohne MSCOMM uswusf. realisieren. Ja, kann man. Ich wollte um MSCOM herum, weil es A) eine registrierung im System benötigt und B) zusätzliche Dateien braucht. Es gibt in VB6.0 aber IMO keinen Weg um MSCOMM herum, da Multithreading nicht stabil zum Laufen gebracht werden kann. >Ob das jetzt was nützt, weiss ich nicht, Du kannst Dir den Link ja mal ansehen Beitrag "Re: benötige Hilfe zu Excel Makro" Cool, danke. Das werde ich mir definitiv durchlesen. >Ich hoff, ich darf mal ne kurze Frage zwischendurch stellen. Mach besser deinen eigenen Thread auf, dieser neigt sich zum Ende. >Ich arbeite mit VB.Net und will auf eine Chipkarte zugreifen... diese steckt in einem Kartenleser der an einem USB-Port steckt... aber ich weiß nicht mal wie ich mittels VB.net auf diesen Kartenleser zugreifen kann... >Könnt ihr mir helfen und sagen, wie ich den USB-Port am besten anspreche? Mit USB habe ich keine große erfahrung, und bin davon derzeit wieder abgekommen. Generell scheint man aber eine GUID zu brauchen, die man über das system, oder mitgelieferte Treiber erhalten kann. Die GUID ist eine Art Zeiger auf eine Liste von Geräten, die man auf das Richtige Gerät hin durchsucht (handle aufmachen, schauen, ggf handle zumachen) Hast Du einmal den richtigen Handle, musst Du mit den funktionen im mitgelieferten Treiber das Gerät benutzen. Das ist nur ein kleiner Richtungshinweis. Mit etwas glück korrigiert mich gleich ein vollprofi :) Grüße, und Dank allen für ihre Hilfe. Insbesondere Wolfram.
Danke für deine Antwort... leider kenn ich mich immer noch kein bisschen aus... Also was ich genau machen will: In einem Kartenleser, der am USB-Port hängt, ist eine Chip-Karte. Auf dem Chip dieser Karte befindet sich ein Zertifikat... dieses soll gelesen werden und als Enum abgespeichert werden. Und ich habe noch nicht mal einen kleinen Ansatz dies zu lösen :( Da ich neu bin bei VB.Net - dies aber nur mit VB.Net lösen will (um dies besser kennen zu lernen) - brauche ich jeden kleinsten Hinweis, den ich bekommen kann... PS: Ich habe keine Software zum Kartenleser Danke im schon im Voraus
PS: wie kann ich eventuell eine GUID in mein Programm einbauen?
Du solltest wirklich einen eigenen Thread starten :) Also ich habe auch keine Ahnung, aber: http://www.microsoft.com/germany/msdn/library/office/OfficeVBAUndDieWindowsAPI.mspx?mfr=true http://www.chf-online.de/api/apilandsprache.htm http://www2.hawaii.edu/~hermany/api.htm http://proyectosfie.com/html/usb/libro/capitulo13.pdf http://msdn2.microsoft.com/en-us/office/aa905357.aspx http://msdn2.microsoft.com/en-us/library/ms789918.aspx http://msdn2.microsoft.com/en-us/library/aa476228.aspx http://msdn2.microsoft.com/en-us/library/aa476213.aspx http://forum.microchip.com/tm.aspx?m=81752&mpage=1&key=𝤢 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805 http://www.comvcon.com/VB6MCHPUSB.html Das meiste wird Dir nicht helfen, ich habe einfach blind meinen usb-link ordner kopiert
Gast
#552181
>Wenn sich egal was tut, muss ich egal was machen :) >Was ich wann tue ist imo recht schnuppe. Fast, du mußt sicherstellen das zu einem Zeitpunkt immer nur einer schreibend Zugriff auf Variablen, die in mehreren Events benutzt werden, hat.
Johannes H. wrote:
> Du solltest wirklich einen eigenen Thread starten :)
hab i bereits :)
trotzdem würd ich noch gerne wissen, wie ich den GUID verwenden kann
bzw. welche? Geräteklasse-GUID oder Bustyp-GUID? Oder ginge das nicht
mit der Geräte-ID?
Gast
#554073
der Zugriff auf Kartenleser erfolgt uber die CT-API oder den PCSC Treiber. diese erhält man beim Kartenleserhersteller (download). Welchen Leser hast du? Vieleicht kann ich dir weiterhelfen. thomas
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.