Question

J'ai une classe non géré que je suis en train de dllexport d'un gérés fichier DLL. Je suis en train d'utiliser la classe non gérée dans un autre gérés fichier DLL. Cependant, lorsque je tente de faire, je me lien erreurs .

Je l'ai fait beaucoup de fois avec des fichiers DLL non gérés, donc je sais comment cela fonctionne. Je sais comment utiliser "ref publique", etc. dans les classes gérées.

Y at-il quelque part le drapeau que je dois mettre? Ou dois-je faire de la magie DllImport?

est sur .NET 2.0 et Visual Studio 2005 .

Était-ce utile?

La solution

Vous devez utiliser un assembly pour les bibliothèques non gérés ou des composants COM. Voici un lien avec de bonnes informations à ce sujet.

Autres conseils

Si vous voulez utiliser une classe non géré à partir du code managé, vous pouvez:

  1. Utilisez un peu méchant P / Invoke pour charger les fonctions de membre de classe (constructeur, destructor, etc.) et faire une classe wrapper géré plus méchant pour appeler les fonctions membres « réelles ». Cela devient encore pire quand il y a des méthodes virtuelles impliquées.
  2. La deuxième option (qui à mon avis est mieux) est d'écrire un C ++ / CLI classe wrapper (vous avez dit que vous êtes familier avec cela) qui est une simple approximation à la classe non géré. Pour toutes les fonctions de membre que vous avez dans la classe non géré, vous aurez une semblable dans votre classe proxy. Ensuite, il est un cas simple d'ajouter une référence à cette DLL à partir de votre projet géré, et vous serez en mesure d'utiliser votre classe comme toute autre classe .NET. Prendre en considération le fait que vous allez rencontrer plus de travail si votre classe expose d'autres choses non géré (ceux qui ne peuvent pas être rangea).

Si vous avez besoin de plus amples informations sur la deuxième option, je pourrais regarder quelques vieux liens qui expliquent cette technique plus.

S'il est un fichier DLL COM vous pouvez utiliser l'interopérabilité COM .NET. question Stack Overflow est-il une meilleure pratique pour accéder à des fonctions C ++ COM natif de interop de C #? est un autre question qui répond à cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top