vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
ComClass 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComClass mit Parametern 
Autor: Manfred X
Datum: 09.09.13 16:53

Hallo!

Vielleicht noch eine Überladung von New mit dem Parameter erstellen ????
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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....
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ???
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ???
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ComClass mit Parametern 
Autor: ModeratorDaveS (Moderator)
Datum: 11.09.13 20:00

Weil du unter Tools/Optionen/Projekte und Projektmappen die Option "Erweiterte Buildkonfigurationen anzeigen" nicht aktiviert hast.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel