J'ai un projet, où je dois me connecter à une bibliothèque basée sur C, et je n'ai pas pu obtenir les fonctions de C# en utilisant le DLLImport. Je dois utiliser un projet C++/CLI basé sur ces fonctions pour les utiliser. (plus à cette histoire mais pas important).Visual C++/CLI - Classe CLR - LNK2020 Erreur - Comment réparer?
J'ai étudié le C++ il y a plus de 10 ans, alors pardonnez-moi si cela semble naïf.
J'ai acheté quelques livres sur la mise en œuvre C++/CLI l'année dernière, et j'ai une idée de ce qui est en jeu - j'ai seulement creusé dans ces livres pour ce projet. (Je suis programmeur depuis longtemps).
Je pensais que je devrais commencer un petit projet d'exemple de projet pour me familiariser avec ce qui sera impliqué, pour s'assurer que je pourrais compiler, etc. J'ai commencé un projet en utilisant Visual Studio 2008 SP1; Visual C++> CLR> Bibliothèque de classes. Dans le projet - je veux utiliser à la fois géré et natif de la DLL. Donc, le commutateur/clr est utilisé. J'ai utilisé d'autres noms dans le code réel; mais c'est très, très proche. (Il n'y a pas d'autres fichiers ou fonctions à ce stade)
tête:
//myWrapper.h
#pragma once
using namespace System;
namespace myWrapper {
public ref class myWrappedService {
myWrappedService();
bool Connected(String ^user,String ^password,String ^domain);
}
};
Et la mise en œuvre a cela.
//myWrapper.cpp
//This is the main DLL file
#include "stdafx.h"
#include "myWrapper.h"
using namespace System;
public ref class myWrappedService
{
public:
myWrappedService() {}
bool Connected(String ^user,String ^password,String ^domain)
{
//just a simple result to start - no real functionality
bool result = false;
return result;
}
};
C'est le code - qui compile mais reçoit des erreurs de liens.
erreur LNK2020: jeton non résolu (06000002) myWrapper.myWrappedService :: connectés
LNK1120 d'erreur fatale: 1 sans solution externe.
Cela a semblé mort-facile - et je pourrais penser beaucoup à partir d'une approche C#. Je m'attends à ce que ce soit quelque chose de simple - mais je ne suis pas familier avec ce que je devrais voir dans l'approche CLI. (J'ai passé quelques heures à chercher des réponses et je sens finalement que j'ai besoin de poser une question à laquelle on pourrait répondre).
J'ai essayé votre approche - la ligne Connect se plaint d'une erreur 3149: 'System :: String' ne peut pas utiliser ce type sans un '^' de niveau supérieur. J'ai également besoin d'une valeur de retour pour dire que je me suis connecté - si vous pouviez modifier votre exemple - pourrait fonctionner. – Wolfledge
J'ai vérifié que ce code était compilé et intégré dans un assemblage de travail avant que je n'envoie. Les arguments String de Connect() ont clairement un^visible dans l'extrait, vérifiez votre copie. Je pense que vous pouvez comprendre comment changer le type de retour de la méthode par vous-même. –
ma mauvaise - faute de frappe - et en utilisant mon type de retour, il compilé. Et quand j'ai ouvert la DLL avec réflecteur, la méthode était là. Je vous remercie. – Wolfledge