Neuling mit InterOp-Problemen

14/03/2008 - 15:58 von Jens Duczmal | Report spam
Hallo,

ich habe die undankbare Aufgabe bekommen, eine Verbindung zwischen
VB.NET und VB6 herzustellen. Ich bin momentan leider kompletter
VB.NET-Neuling aber natürlich genre lese und lernbereit.

Natürlich habe ich schon das Inet durchsucht, besonders diese
Gruppe hier, aber so richtig schlau werde ich leider nicht.
Ich weiss, das InterOp hàufig angefragt wird, aber ich glaube
bisher braucht niemand so schràge Sachen wie ich :-)
Bitte keine Flames a'la RTFM mach ich ja schon.

Ich weiss auch, das meine Idee vermutlich an vielen
Ecken und Enden Macken zeigen wird, aber einen Versuch ist es wert.

Aufgabenstellung
=
Ich möchte in einer VB.NET.dll ein Active-X-Control verwenden.
Falls es von Interesse ist: Das VSFlexGrid von ComponentOne
(ja, ich weiss das die eins für VB.NET anbieten, kann ich aber
nicht gebrauchen)

Okay. Control eingebunden auf WinForm eingefügt. Scheint gut zu laufen.

Ich möchte nun in einer öffentlichen Klasse dieses Control
als Property zur Verfügung stellen.

Also z.B.

Public ReadOnly Property Grid() As VSFlex7L.VSFlexGrid
Get
Grid = p.fg
End Get
End Property

Oder als AxVSFlex7L.AxVSFlexGrid (das oben geht nàmlich nicht)
Oder auch gerne as Object. Damit hàtte ich kein Problem.



Dazu gesellt sich eine VB6-Anwendung. Diese hat bisher
das Grid in seinen Dialogen benutzt (aber per Wrapper-Klasse
gekapselt).

Ich möchte nun von VB6 aus das Grid auf dem WinForm in VB.NET
benutzen (jaja...ich höre Euch schon schreien)

Dim v As InterOpTest.clsInterop
Dim fg As VSFlex7L.VSFlexGrid

Set v = New InterOpTest.clsInterop
v.ShowForm
Set fg = v.Grid
fg.BackColor = vbRed



Und hier fangen meine Probleme an. Zwischen 2 VB6-Anwendungen làuft das
natürlich ohne Probleme. Aber hier nicht.


PROBLEMFINDUNG
==
VB.NET scheint für das VSFlexGrid.ocx 2 Interop.dll's anzulegen.
Eine Interop.VSFlex7L.dll und eine AxInterop.VSFlex7L.dll
Okay. Zur Kenntnis genommen

Das Grid selbst auf dem WinForm làuft als AxVSFlex7L.AxVSFlexGrid
und damit hàngt mein PRoblem zusammen.

AxVSFlex7L.AxVSFlexGrid ist in VB unbekannt.

Ich habe mir mit RegAsm eine entsprechende TLB dafür erzeugt.
AxInterop.VSFlex7L.tlb
Diese kann ich über einen Verweis in VB6 einbinden.

Das dumme ist nur, das das AxVSFlexGrid-Objekt leider
keine einzige Property etc. mehr in VB6 anzeigt.
Auch über den Objektkatalog ist nichts zu sehen.
Ergo kann ich nichtmal die BackColor setzen.

Soweit mir Google verraten hat, könnte mir die TLBIMP.exe
irgendwie weiterhelfen. Mehr weiss ich aber auch nicht.

Ich habe per Trial and Error mal alle für mich sinnvollen
Kombinationen durchprobiert, aber irgendwie wird mir keine
DLL? TLB? Irgendwas anderes? erstellt.


So wie ich das bisher verstehe, bràuchte ich einen COM-Wrapper
für die AxVSFlexGrid.dll die VB.NET erzeugt hat.
Und nur mit diesem Wrapper hàtte ich dann Zugriff auf die
einzelnen Methoden und Properties.

Oder liege ich ganz falsch und das funktioniert so oder so nicht?

Spàtere Handlingprobleme hin oder her. Testen würde ich das gerne mal.

Wer wissen möchte, warum ich so etwas schràges brauche bekommt
auch gerne eine Antwort. Sagen wir, es dient der Vorbereitung der
Umstellung von Access/VB6-Anwendungen auf VB.NET. Wobei erst einmal
nur der Hauptdialog umgestellt wird der dann gemeinsam benutzt wird.

Mir graut schon davor ;-)

Besten Dank für Eure Hilfe
Gruß,
Jens Duczmal
 

Lesen sie die antworten

#1 Thorsten Doerfler
14/03/2008 - 22:45 | Warnen spam
Jens Duczmal schrieb:
Ich möchte in einer VB.NET.dll ein Active-X-Control verwenden.
Falls es von Interesse ist: Das VSFlexGrid von ComponentOne
(ja, ich weiss das die eins für VB.NET anbieten, kann ich aber
nicht gebrauchen)

Okay. Control eingebunden auf WinForm eingefügt. Scheint gut zu laufen.

Ich möchte nun in einer öffentlichen Klasse dieses Control
als Property zur Verfügung stellen.

Also z.B.

Public ReadOnly Property Grid() As VSFlex7L.VSFlexGrid
Get
Grid = p.fg
End Get
End Property

Oder als AxVSFlex7L.AxVSFlexGrid (das oben geht nàmlich nicht)
Oder auch gerne as Object. Damit hàtte ich kein Problem.



Dazu gesellt sich eine VB6-Anwendung. Diese hat bisher
das Grid in seinen Dialogen benutzt (aber per Wrapper-Klasse
gekapselt).



Ohne jetzt tiefer auf Dein Problem einzugehen (vielleicht im Laufe des
Wochenendes, mal schaun): Hast Du Dich auch schon mal mit dem Interop
Forms Toolkit beschàftigt?

Microsoft Interop Forms Toolkit 2.0
http://msdn2.microsoft.com/en-us/vb...19144.aspx

Denke zwar nicht, dass da eine Zauberlösung drin ist, aber kann ja mal
sein.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen