| |
VB.NET - Ein- und UmsteigerComClass mit Parametern | | | Autor: Andi W | Datum: 09.09.13 16:51 |
| Hallo,
ich in gerade dabei eine alte DLL aus VB6 nach VB.NET umzuschreiben (VS2008).
Irgendwie komme ich nicht so richtig zurecht.
Ich habe eine ComClass daraus gemacht, weil ich aus Office via VBA drauf zugreifen will. Prinzipiell kriege ich es hin. Jetzt hakt es im Moment daran, dass ich in der VB6-Lösung beim Erstellen des Objekts mit Parametern arbeite. Also z.B.
Public Sub New (ByVal MyString As String)
...
End Sub Wenn ich in VS2008 eine ComClass in mein Projekt einfüge, wird folgendes generiert
' Eine erstellbare COM-Klasse muss eine Public Sub New()
' ohne Parameter aufweisen. Andernfalls wird die Klasse
' nicht in der COM-Registrierung registriert und kann nicht
' über CreateObject erstellt werden.
Public Sub New()
MyBase.New()
End Sub Wie im erzeugten Kommentar zu lesen, soll ich die Klasse ohne Parameter erstellen..... ???
Was kann ich tun, um nicht sämtlichen Code neu erfinden zu müssen???
Vielen Dank
A.
| |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 09.09.13 16:53 |
| Hallo!
Vielleicht noch eine Überladung von New mit dem Parameter erstellen ????
| |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 09.09.13 16:54 |
| aha, klingt gut .... kannst du mir kurz nen Ansatz liefern ???
Bei einer Funktion würde ich es ja hinkriegen, aber bei Sub New ?? | |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 09.09.13 17:00 |
|
Public Overrides Sub New (ByVal MyString As String)
...
End Sub VB.NET meint: "Sub New" kann nicht als "Overrides" deklariert werden.... | |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 09.09.13 17:07 |
| Hallo!
Ob es in Deinem Fall klappt, kann ich im Moment nicht beurteilen.
Das Prinzip (Überladen, nicht Überschreiben!):
Public Class Class1
Dim paramstring As String = ""
Public Sub New()
MyBase.new()
End Sub
Public Sub New(ByVal str As String)
MyBase.new()
If Not String.IsNullOrWhiteSpace(str) Then paramstring = str
End Sub
End Class | |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 09.09.13 17:31 |
| Da sagt VS zwar 0 Fehler, aber nach dem Kompilieren Warnungen ohne Ende....
Warnung 1: Der Typbibliothekexporter hat beim Verarbeiten von "bla bla bla" einen geringfügigen Fehler gefunden. Warnung: Der Typbibliothekexporter hat eine generische Typinstanz in einer Signatur gefunden. Der generische Code darf nicht nach COM exportiert werden.
Es ist immer der gleiche Fehler, wobei bla bla bla immer der Bezug zu einer Klasse bzw. zu einem parametrisierten Aufruf einer solchen ist.
Keine Ahnung, was VS hier von mir will !?!
Der Typbibliothekexporter erzugt vermutlich die TLB-Datei, die ich dann in Office referenzieren muss ... liege ich da richtig ??? | |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 09.09.13 17:34 |
| Ich rate mal ...
Hast Du einen generischen Datentyp (deklariert mit Of ...) als
Parameter für eine Com-sichtbare Methode verwendet ??
http://www.mycsharp.de/wbb2/thread.php?postid=244366
Beitrag wurde zuletzt am 09.09.13 um 17:38:44 editiert. | |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 10.09.13 09:15 |
| Guten Morgen,
... ja das stimmt !!!
Jetzt weiß ich aber nicht wie ich es umbauen kann....
Momentan ist es so, dass die DLL mehrere Klassen besitzt und z.B. eine Klasse eine Auflistung verschiedener Objekte einer anderen Klasse erzeugt.
MyClass1 hat zum Beispiel
Private mMyObjekte As New List(Of MyClass2) Dann gibt es in MyClass1 Funktionen, die halt Objekte instanzieren, parametrisieren und dann der Liste hinzufügen
Dim MyOBJ as New mMyObjekte()
MyOBJ.P1="P1"
MyOBJ.P2="P2"
MyOBJ.P3="P3"
...
mMyObjekte.Add(MyOBJ) und andere, die die Liste durchlaufen
For Each mObjekteX As MyClass2 in mMyObjekte
mObjekteX.DoSomething
Next Wie soll ich das zu Arrays umbauen ???
Vielen Dank
A. | |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 10.09.13 09:31 |
| Du kannst Methoden in Net, die in Com-Anwendungen NICHT
benötigt werden, über das ComVisible-Attribute von Com ausklammern.
Das dürfte bei so parametrisierten Methoden meist möglich sein.
Du mußt im anderen Fall auch nichts großartig innerhalb
von Vb.Net-Code umbauen, mit einer Ausnahme:
Du übergibst als Methoden-Parameter oder Eigenschaft nicht die generische
Net-Klasse z.B. List(of ..), sondern übergibst die enthaltene Daten-Auflistung
z.B. per ToArray-Methode der Liste als Array-Parameter
- methoden-intern kannst Du dann wieder per New-Konstruktor aus dem
übergebenen Array eine Liste machen.
Sollte allerdings Deine Klasse komplexer aus Net-Klassen aufgebaut sein,
mußt Du wohl tatsächlich eine zusätzliche Wrapperklasse erstellen, die alle
benötigten Eigenschaften und Methoden dieser Klasse in Com kompatibler Form
enthält und sie dann für die M/E der Net-Klasse jeweils geeignet aufbereitet.
Beitrag wurde zuletzt am 10.09.13 um 09:36:34 editiert. | |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 10.09.13 09:55 |
| coooool ..... 0 Warnungen .... !!!
Vielen vielen Dank.... Dann gehe ich jetzt mal zu Excel rüber, gucken was da so ankommt ... :-D
| |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 10.09.13 12:40 |
| Danke nochmal .....
bin ein ganz schönes Stück weiter gekommen. Hab noch zwei Probleme. Das eine krieg ich vielleicht selber noch gekackt, das andere weiß ich nicht so recht....
Die DLL/TLB ist ja dann 32bit und nach Registrierung auch in Excel(x86)-VBA verfügbar. Unter Excel x64 allerdings nicht.... was kann ich tun, um die DLL/TLB für beide bit-breiten verfügbar zu machen
Danke
A. | |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 10.09.13 13:00 |
| Ich vermute, du mußt zwei Versionen dieser DLL erstellen.
(im Konfigurations-Manager einrichten).
| |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 11.09.13 13:01 |
| Hi ....
für 32bit habe ich jetzt erst mal soweit alles hinbekommen - danke für die Hilfe.
für 64bit habe ich umgestellt auf Kompilieren->Ziel CPU->x64
Meintest du sowas ???
Bekomme sofort 2 Warnungen:
"Beim Erstellen der Assembly "MeineDLL" wurde möglicherweise ein Problem entdeckt: die Assembly mscorlib.dll, auf die verwiesen wird, hat einen anderen Zielprozessor."
Gleiches für System.Data.dll
Laut Internetrecherchen soll das aber unproblematisch sein. Ich kann es jedoch nicht testen, denn beim Versuch zu kompilieren bekomme ich einen Fehler:
File "C:\(...)\MeineDLL.DLL" is not a valid assembly....
Was kann ich tun ???
| |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 11.09.13 16:16 |
| Projekt öffnen.
Im Menü Erstellen den Konfigurationsmanager starten.
Neue Konfiguration anlegen.
Plattform auf x64 einstellen.
| |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 11.09.13 16:29 |
| den Konfigurationsmanager gibt's bei mir irgendwie nicht (trotz Prof-Version) ??? auf x64 hatte ich umgestellt bei den Kompilierungseinstellungen ... da kam der zuvor beschrieben Fehler....
Der Fehler bleibt aus, wenn ich "für Com-Interop registrieren" abwähle... Dann mit der 64bit-Variante von Regasm händisch registriert und tlb erzeugen... dann geht's....
trotzdem würde mich der Konfigurationsmanager mal interessieren ... warum hab ich den nicht ???
Danke
A. | |
Re: ComClass mit Parametern | | | Autor: Manfred X | Datum: 11.09.13 20:22 |
| Ergänzender Hinweis:
Der Konfigurationsmanager ist in allen Versionen des Visual Studio enthalten.
Er sollte stets verwendet werden, weil dadurch sicher gestellt wird, daß
unterschiedliche Build-Einstellungen (insbesondere Debug-/Release) separat
ohne gegenseitige Beeinflußung verwaltet werden.
| |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 12.09.13 08:43 |
| vielen Dank ....
gesehen habe ich das auch schon mal... ja ... fragt sich, warum das deaktiviert war. Aber das ist ja dann erst mal egal. .... Viel gelernt !!!
bin durch - danke für den freundlichen Thread ...
A. | |
Re: ComClass mit Parametern | | | Autor: Andi W | Datum: 13.09.13 15:22 |
| Noch ein Nachsatz für interessierte:
Die COM *.dll und *.tlb muss nicht mal auf 64bit generiert werden. Solange sie im 64bit-Bereich registriert wird. Dies übernimmt dann der Installer (in meinem Fall InstallShield)... dann ist sie auch aus 64bit Office ansprechbar .... (hätte ich das vorher gewusst )
Beitrag wurde zuletzt am 13.09.13 um 15:23:10 editiert. | |
| 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 sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|