vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 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 - Fortgeschrittene
reflection und com interop 
Autor: Urot
Datum: 28.08.05 01:02

hallo alle zusammen,

ich möchte mal wieder was ganz spezielles ;)
also generell möchte ich com controls von third party unternehmen wie adobe oder real
nach .net wrappen. bloss nun ist dabei das problem wenn ich die verweise setze und diese dinger nicht installiert sind dann gibts probleme also dachte ich mir ich lad
alles zur laufzeit rein, dann kann ich nämlich vorher richtig prüfen ob alles da ist.
habe angefangen mit TypeLibConverter + AssemblyBuilder Classes rumgespielt
so nun kriege ich auch alle types und ich müsste doch dadurch auch alle methoden aufrufen koennen und vor allem auch instanzen von klassen erstellen können. bloss bei den vielen parameter die man braucht habe ich den überblick verloren
kann mir jemand helfen da licht ins dunkle zu bringen oder vielleicht sagen wie man das komplett anders lösen kann ?

ach hier noch mein code wo ich nicht mehr weiterkomme :
Imports System.Runtime.InteropServices
Imports System.Reflection
 
Public Class Form1
' ....
' ....
 
    Private Enum RegKind
        RegKind_Default = 0
        RegKind_Register = 1
        RegKind_None = 2
    End Enum 'RegKind
 
    <DllImport("oleaut32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)> _
    Private Shared Sub LoadTypeLibEx(ByVal strTypeLibName As [String], ByVal _
    regKind As RegKind, <MarshalAs(UnmanagedType.Interface)> ByRef typeLib _
    As [Object])
    End Sub
 
    Function loadlib(ByVal path As String) As Object
        Try
            Dim typeLib As [Object]
            LoadTypeLibEx(path, RegKind.RegKind_None, typeLib)
            Return typeLib
        Catch ex As Exception
            Return Nothing
        End Try
    End Function
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
 
        Try
            Dim typeLib As [Object] = loadlib("C:\Programme\Gemeinsame" & _
              "Dateien\Adobe\SVG Viewer 3.0\NPSVG3.dll")
            If typeLib Is Nothing Then
                MessageBox.Show("LoadTypeLibEx failed.")
                Exit Sub
            Else
                Dim converter As New TypeLibConverter
                Dim eventHandler As New ConversionEventHandler
                Dim asm As Reflection.Emit.AssemblyBuilder = _
                  converter.ConvertTypeLibToAssembly(typeLib, "svg.dll", 0, _
                  eventHandler, Nothing, Nothing, Nothing, Nothing)
                ' get all the types inside the library
                Dim _ISVGControlEvents, SVGCtlClass, SVGCtl, ISVGControl, _
                SVGBehaviorFactoryClass, SVGBehaviorFactory, _
                SVGRendererClass, SVGRenderer As Type
                For Each t As Type In asm.GetTypes
                    If t.Name = "_ISVGControlEvents" Then
                        _ISVGControlEvents = t
                    ElseIf t.Name = "SVGCtlClass" Then
                        SVGCtlClass = t
                    ElseIf t.Name = "SVGCtl" Then
                        SVGCtl = t
                    ElseIf t.Name = "ISVGControl" Then
                        ISVGControl = t
                    ElseIf t.Name = "SVGBehaviorFactoryClass" Then
                        SVGBehaviorFactoryClass = t
                    ElseIf t.Name = "SVGBehaviorFactory" Then
                        SVGBehaviorFactory = t
                    ElseIf t.Name = "SVGRendererClass" Then
                        SVGRendererClass = t
                    ElseIf t.Name = "SVGRenderer" Then
                        SVGRenderer = t
                    End If
                Next
                ' keine ahnung wie nun eine instanz des typs erstellen ?!?
                ' geschweige denn wie die member aufrufen oder gar eine klasse 
                ' erstellen die 
                ' ein interface implementiert aus der assembly ?!?
                ' gibts da ein gutes tut / buch ?
                ' oder kann es mir wer erklären
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub
 
    Public Class ConversionEventHandler
        Implements System.Runtime.InteropServices.ITypeLibImporterNotifySink
 
        Public Event Warning(ByVal code As Integer, ByVal message As String)
 
        Public Sub ReportEvent(ByVal eventKind As ImporterEventKind, ByVal _
          eventCode As Integer, ByVal eventMsg As String) Implements _
          ITypeLibImporterNotifySink.ReportEvent
            If eventKind = ImporterEventKind.NOTIF_CONVERTWARNING Then
                RaiseEvent Warning(eventCode, eventMsg)
            End If
        End Sub 'ReportEvent
 
        Public Function ResolveRef(ByVal typeLib As Object) As _
          Reflection.Assembly Implements ITypeLibImporterNotifySink.ResolveRef
            ' resolve reference here and return a correct assembly...
            Return Nothing
        End Function 'ResolveRef
    End Class 'ConversionEventHandler
 
End Class ' Form1
hilfe wäre echt supi danke
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
reflection und com interop1.114Urot28.08.05 01:02
Re: reflection und com interop591Urot28.08.05 01:03
Re: reflection und com interop586Urot28.08.05 01:35

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