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 |