2009-07-01 6 views
1

J'ai passé le dernier jour à écrire une bibliothèque de contrôle simple dans VB.NET à utiliser dans un projet vb6 existant. J'ai la plupart des choses qui fonctionnent; mes contrôles apparaissent dans la boîte à outils vb6, les événements fonctionnent, etc. Mon problème actuel est d'essayer de passer des objets complexes entre vb6 et .NET.Marshaling types de données complexes entre .NET et COM

Par exemple, la propriété Font d'un .NET TextBox. Maintenant, vb6 utilise des objets stdFont et .NET (évidemment) utilise le type System.Drawing.Font. Mon objectif avec ce projet est de rendre le changement transparent du coté de vb6. Je voudrais émuler complètement l'interface vb6 pour chaque contrôle afin de minimiser le code qui doit changer lorsque nous ajoutons les nouveaux contrôles, mais je suis coincé ici. Voici un exemple (.NET):

Public Overloads Property Font() As stdole.StdFont 
    Get       
     Return ??? 
    End Get 
    Set(ByVal value As stdole.StdFont) 
     Dim style As FontStyle = GetFontStyle(value) 
     TextBox1.Font = New Font(value.Name, value.Size, style, GraphicsUnit.Pixel, value.Charset) 
    End Set 
End Property 

Comme vous pouvez le voir, le 'getter' est le problème. Comment puis-je imiter l'interface vb6 ici si je ne peux pas retourner la propriété Font de la zone de texte? Je ne veux pas renvoyer une copie stdFont du System.Drawing.Font pour des raisons évidentes.

Maintenant, je pourrais juste ajouter des méthodes comme SetBold(), SetItalic(), et SetFont() (ou des propriétés booléennes comme "FontIsBold"), mais c'est exactement ce que j'essaie d'éviter. Mon expérience d'interopérabilité est assez minime, donc toute aide ici serait appréciée.

Répondre

1

J'étais heureux de voir votre réponse ... mais je pense qu'il me manque quelque chose. J'ai suivi les instructions dans le lien vers msdn que vous avez fourni, et sur le côté VB6, j'ai accès aux propriétés de police sur le UserControl, mais quand j'essaye de (disons) définir la taille de la police, cela n'affecte pas le chemin le texte est dessiné. Et quand j'essaye de forcer un changement à la taille de police sur le TextBox incorporé du côté de VB.Net (dans la propriété de Set Text), j'obtiens une erreur disant que font.size est ReadOnly ...

Est un travail exemple disponible?

+0

Maintenant, vous voyez que sur le côté VB6, vous devez redéfinir un objet de police entier sur UserControl, ne peut pas simplement changer une propriété sur la police. – user2359723