int CPMSifDlg::EncodeAndSend(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
{
...
return 1;
}
extern "C"
{
__declspec(dllexport) int start(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
{
return CPMSifDlg::EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
}
}
En ligne return CPMSifDlg::EncodeAndSend
J'ai une erreur: Erreur: une référence de membre non statique doit être relative à un objet spécifique.
Qu'est-ce que ça veut dire?
EncodeAndSend
n'est pas une fonction statique, ce qui signifie qu'elle peut être appelée sur une instance de la classe CPMSifDlg
. Vous ne pouvez pas écrire ceci:
CPMSifDlg::EncodeAndSend(/*...*/); //wrong - EncodeAndSend is not static
Il devrait plutôt s'appeler comme:
CPMSifDlg dlg; //create instance, assuming it has default constructor!
dlg.EncodeAndSend(/*...*/); //correct
La méthode CPMSifDlg::EncodeAndSend()
est déclarée comme non -static
et doit donc être appelée à l'aide d'un objet de CPMSifDlg
. par exemple.
CPMSifDlg obj;
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
Si EncodeAndSend
n’utilise pas/associe aucune spécificité d’objet (c.-à-d. this
) mais général pour le class CPMSifDlg
puis déclarez-le comme static
:
class CPMSifDlg {
...
static int EncodeAndSend(...);
^^^^^^
};
Seules les fonctions statiques sont appelées avec le nom de la classe.
classname::Staicfunction();
Les fonctions non statiques doivent être appelées à l'aide d'objets.
classname obj;
obj.Somefunction();
C'est exactement ce que votre erreur signifie. Puisque votre fonction est non statique, vous devez utiliser une référence d'objet pour l'invoquer.