2010-01-05 8 views
1

J'ai créé une DLL vb.net appelée "WSdll.dll". Je l'ai compilé, créé une bibliothèque de types (tlb) et enregistré globalement (gacutil). Il inclut un fichier appelé wsutils.vb, qui inclut un espace de noms appelé "wsutils". Dans l'espace de noms, il y a une interface (avec attribut) appelée "IWSconnection", et une classe appelée "WSconnection". L'interface et la classe sont publiques, de même que toutes les méthodes et propriétés. J'ai ensuite essayé de l'implémenter dans un projet C++ non managé.Utilisation de vb.net dll dans un projet C++ non géré

Je l'importaient: #import ".. \ WSdll \ WSdll \ bin \ Debug \ WSdll.tlb" \ raw_interfaces_only, \ named_guids, \ no_namespace

ensuite essayé de créer une instance: CComPtr < IWSconnection> pIWSconnection; pIWSconnection.CoCreateInstance (__uuidof (wsutils :: WSconnection));

Je reçois 2 erreurs a) wsutils est pas un nom de classe ou espace de nom b) wsconnection identificateur non déclaré

Quelles autres mesures dois-je faire pour obtenir le dll travailler ici?

TIA

+0

Vous avez épelé "natif" faux –

Répondre

1

Vous mettez no_namespace dans la ligne de #import - de sorte que votre objet est pas dans l'espace de noms wsutils, il est dans l'espace de noms global. Supprimez le no_namespace de la ligne # import ou le wsutils :: de la ligne de création d'objet.

+0

Merci un million! Ça a marché. Maintenant, j'ai une autre question: J'ai créé l'objet en utilisant: CComPtr pIWSconnection; pIWSconnection.CoCreateInstance (__uuidof (IWSconnection)); Puis, quand j'ai essayé d'appeler une méthode: pIWSconnection.connect (...) Je reçois une erreur: identifiant non déclaré pIWSconnection Pourquoi serait-il travailler avec « CoCreateInstance », et non « connecter »? – user228058

+0

Tout d'abord, vous devriez pIWSconnection-> connect. Par ailleurs, pourquoi mélangez-vous des pointeurs intelligents ATL (CComPtr) avec Native COM? –

1

Les noms d'espace de noms utilisés dans votre code VB.NET ne sont pas visibles par un client COM. Il suffit d'omettre le préfixe wsutils ::. Chaque fois que vous avez un doute à quoi ressemblent les noms importés, ouvrez les fichiers .tlh et .tli générés automatiquement avec votre éditeur.

+0

Par défaut, #import place toutes les interfaces et classes dans un espace de noms correspondant au nom de la typelib (le nom interne, pas le nom du fichier). Qui, par défaut, correspond au nom du projet pour les typelibs .NET générés. Qui, par défaut, est l'espace de noms par défaut pour toutes les classes du projet .NET. :) Quoi qu'il en soit, l'erreur concerne la non-concordance des espaces de noms. –

Questions connexes