Je travaille sur un projet dans lequel je dois importer un fichier DLL dans un projet VB créé il y a quelques années. La DLL a été créé en C++, et ressemble à:Utilisation de DLL import/Declare dans VB.NET avec des types de paramètres non utilisés par .NET
void CoordinateConversionService::convert(SourceOrTarget::Enum sourceDirection, SourceOrTarget::Enum targetDirection, CoordinateTuple* sourceCoordinates, Accuracy* sourceAccuracy, CoordinateTuple& targetCoordinates, Accuracy& targetAccuracy)
Je suis un stagiaire à mon travail, et je n'ai pas dû utiliser ce encore, si ma compréhension est extrêmement limitée, ainsi que mon utilisation de VB (Je suis un gars C++/C#). Voici quelques questions:
1) En regardant Dllimport, il semble que la dernière partie en dehors des paramètres est un type de retour. Exemple de code d'un autre site:
<DllImport("advapi32.dll")> _
Public Function GetUserName(_
ByVal lpBuffer As StringBuilder, _
ByRef nSize As Integer) As Boolean
Le type de retour est-il "As Boolean"? Si oui, j'ai essayé d'utiliser "Sub" et il dit "Mot-clé ne nomme pas un type." D'où la raison pour laquelle j'ai cherché à déclarer, car il semble que je puisse retourner void/sub comme type de retour.
2) Essayer d'utiliser les types "CoordinateTuple" et "Accuracy" me pose des problèmes, en disant qu'ils ne sont pas définis. Comment puis-je contourner cela parce que je ne pense pas que je peux vraiment les définir, et qu'en est-il du fait qu'ils sont des pointeurs? Aussi - Je ne peux pas modifier le code C++ de quelque façon que ce soit, donc ce que j'ai c'est ce que j'ai.
PS - J'ai essayé d'ajouter comme une référence et j'ai l'erreur qui dit que ce n'est pas un fichier COM valide. – ibarczewski
Nous avons besoin de plus d'informations sur les types personnalisés 'SourceOrTarget :: Enum',' CoordinateTuple' et 'Accuracy'. VB et C# peuvent seulement gérer des fonctions C simples, pas de fonctions C++ (le marshaller a été conçu pour fournir un accès simple à l'API Windows), donc si ces types sont des types non-POD, vous devez écrire un C++. Interface NET. À tout le moins, vous devez vous débarrasser des paramètres de référence C++ et déclarer la fonction 'extern 'C" '. – Philipp
Parlez-vous du code C++? Parce que je ne peux pas le modifier d'aucune façon, forme ou forme. – ibarczewski