J'utilise le code suivant pour accéder à une méthode dans le fichier dll et j'obtiens un Access violation reading location 0x41100000
lorsque j'appelle la méthode de la méthode dll.Accédez à l'emplacement de lecture de violation lors de l'accès à une méthode dll
La méthode que je suis en train d'accéder est du prototype suivant
int dstoch(float,float,float,float,float,float,float,float,float);
Ceci est mon code
typedef int (*LPMyfunct)(float,float,float,float,float,float,float,float,float);
HINSTANCE hDLL = NULL;
LPMyfunct lpdstoch = NULL;
hDLL = LoadLibrary("c:\\myfile.dll");
if(hDLL!=NULL)
{
std::cout << "Library loaded \n";
lpdstoch = (LPMyfunct)GetProcAddress((HMODULE)hDLL, "dstoch");
int res = 0;
if(lpdstoch != NULL)
{
try
{
res = lpdstoch(1.1,2.2,3.3,4.4,5.4,6.4,7.4,8.8,9.9); //Gives the error
}
catch (std::exception &e)
{
std::cout << e.what();
}
}
}
Toute suggestion que les raisons pourraient être? Y a-t-il une erreur dans le fichier dll? Y at-il un moyen de lire les paramètres du fichier dll? Le détecter pour vérifier si les types de paramètres sont corrects? Le vérificateur de la dépendance montre que la méthode existe mais je ne peux pas identifier les types d'arguments?
Mise à jour:
Je reçois toujours l'erreur
exception de première chance à 0x0040356c en test.exe: 0xC0000005: violation d'accès emplacement d'écriture 0x42080000. Exception non gérée au 0x0040356c dans Cexperiment.exe: 0xC0000005: violation d'accès écriture emplacement 0x42080000.
Je crois aussi que cette question pourrait ne pas être lié à une convention d'appel .La raison pour laquelle je crois parce que je ne reçois pas un message d'erreur de VS2010 indiquant qu'une convention d'appel peut être un cause.I a ce message quand j'ai essayé d'utiliser une autre DLL. Donc, si l'appel d'une convention ou de paramètres n'est pas un problème (vous obtenez le même message de convention d'appel dans le cas où les paramètres sont différents) alors cela pourrait être quelque chose d'autre. Des suggestions sur ce que je pourrais essayer?
Dans votre autre question, vous avez dit qu'il faut 9 flotteurs. Ici vous passez 9 non flottants. – huskerchad
Oui. Je pensais que la conversion serait implicite. J'ai essayé de passer des flotteurs et je reçois la même réponse – MistyD
Ne vous inquiétez pas, les ints à la place des flotteurs est très bien. – chris