madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 2012
-
27 avril 2011 à 16:11
davidsea
Messages postés4Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention13 mars 2014
-
13 mars 2014 à 11:05
Bonjour à tous !
Je suis étudiant actuellement en stage, et je doit établir une communication avec une commande numérique grâce à des dll fournies par le constructeur de cette commande numérique (NUM, sous groupe de Schneider).
J'avoue que je n'ai même pas pu faire la base de la base : utiliser une simple méthode d'une des dll fournie :s
Je vois venir d'ici les commentaires du genre "sujet déja traité 10 000 fois !".
Certes ! Mais je doit être un vrai manche, bien que j'ai épluché les 10 000 sujets en question, je bloque toujours à la base de la base. Voila un bout de code qui plante à l'exécution :
class ComNum
{
//Class1 TestRef1 = null;
//Class1Cpp TestRefCpp = null;
char cTestMsg = 'A';
int iTestCom = 0;
public ComNum()
{
iTestCom = SetPLCTool("HSL"); // <== ligne de l'exception
}
[DllImport("lib_unit2.dll")]
static extern Int16 SetPLCTool(string stTypeCom);
public char TestMsg
{
get
{
return cTestMsg;
}
}
public int TestCom
{
get
{
return iTestCom;
}
}
}
Voila, je veux donc utiliser depuis une autre classe la fonction short SetPLCTool(char* conf) de la dll lib_unit2.dll, que j'ai placé dans un premier temps dans le répertoire du projet, puis dans tous les sous répertoire (aucune info sur google du répertoire dans lequel va chercher le [DllImport] !!!) pour tester. Au passage, j'ai mis avec le .lib et le .h qui allaient avec, à tout hasard...
Il me sort systématiquement une exception assez bateau :
"Impossible de charger la DLL 'lib_unit2.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)"
Pour info : la dll a été crée en visual basic, selon le constructeur. Je code avec visual studio 2010 (projet c# windowsForm).
Etant donné que j'ai rien trouvé sur google par rapport à mon problème, je suppose que c'est que le solution est tellement bête que ça méritait même pas d'en parler ^^
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 28 avril 2011 à 00:54
Salut, si on part du principe que la signature P/Invoke de ta fonction est correcte alors soit la DLL n'est pas dans le même dossier que l'application au moment de l'exécution soit la DLL native à elle même besoin d'une autre DLL qui ne se trouve pas dans le dossier.
Utilise "Dependency Walker" pour connaitre les dépendances de ta librairie.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 28 avril 2011 à 17:51
IESHIMS.DLL est manquant, c'est classique et ça ne pose pas de problème..
Je ne connais pas cette DLL "X_UTW2.DLL" elle doit être ton le dossier de ton EXE ou au moins dans le dossier System. Il te manque quelque chose sur ton PC.. Un framework, une API, un runtime, un correctif etc..
Autre possibilité il ne trouve pas la fonction "SetPLCTool" dans la lib, et donc ne charge pas la lib mais en général le message d'erreur est plus explicite que ça..
Ces 2 problèmes arrivent souvent lorsque la lib C++ n'a pas été compilée pour tourner sur la version Windows actuelle.
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 27 avril 2011 à 18:09
Arf, c'est sur ce serait au top !
J'y avais quand même pensé ^^
Il me dit :
"Une référence à 'D:\...\lib_unit2.dll' n'a pas pu être ajouttée. Vérifiez que ce fichier est accessible et qu'il s'agit d'un assembly ou d'un composant COM valide"
En l'occurence, je doute qu'il s'agisse d'une assembly ou d'un composant COM, étant donné que ce n'est pas du code managé !! (pour ce que j'ai pu en lire sur les différents forum, mais après, vu ce que je m'y connais...)
Une autre idée ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 28 avril 2011 à 09:33
Donc la seule solution est d'utiliser dllimport;
dans quel dossier as tu placé la dll ?
>
Voila, je veux donc utiliser depuis une autre classe la fonction short SetPLCTool(char* conf) de la dll lib_unit2.dll, que j'ai placé dans un premier temps dans le répertoire du projet, puis dans tous les sous répertoire (aucune info sur google du répertoire dans lequel va chercher le [DllImport] !!!) pour tester.
A priori c'est pas la le souci !
Utilise "Dependency Walker" pour connaitre les dépendances de ta librairie.
Cool merci, la ça donne quelque chose !
Il ne trouve pas certain fichiers :
X_UTW2.DLL
IESHIMS.DLL
WER.DLL
Qui sont tous des dépendances de "user32.dll". C'est pas normal non ?
Et il m'en met 1 en rouge :
MPR.DLL (encore un dépendance de "user32.dll")
Sinon, il met des sabliers devant la quasi totalité du reste. (excepté, entre autre, ma libray et ses 2 dépendances directes : kernel32.dll et user32.dll)
Voila, si t'a une idée, je suis tout ouïe ^^ Faut peut-être réinstaller une library ? ou le framwork ?
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 28 avril 2011 à 09:59
J'ajoutte juste un détail :
J'ai essayé d'ouvrir l'exe de dependency walker dans lui-même, il ne trouve pas non plus 2 fichiers :
IESHIMS.DLL
WER.DLL
Par contre il n'émet pas de message d'erreur.
J'avais oublié de mentionner que quand j'ouvre ma dll, il ouvre une boite de dialogue avec l'erreur :
"Errors were detected when processing 'D:\...\LIB_UNIT2.DLL'. See the log windows for details"
=>
"Error: At least one required implicit or forwarded dependency was not found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module."
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 29 avril 2011 à 09:12
C'est bien possible !
La library est très vieille à priori, par contre j'ai essayé avec celle d'un collègue qui exploite depuis c++ les library dont j'ai besoin (à priori, lui ça fonctionnait quand il à tout créé !), j'ai les mêmes soucis ! Et lui aussi sur son propre PC, maintenant... Il doit y avoir eu une modif sur une mise à jour de windaube, ou une bêtise dans le genre...
Sinon j'ai essayé avec d'autres fonctions, dont j'ai bien vérifié le prototype dans le .lib, ça donne toujours rien :s
Je pense que le X_UTW2.DLL est dans le système, vu qu'elle est une dépendance de user32 ! J'ai essayé d'une autre manière sur visual :
[DllImport("kernel32")]
static extern int LoadLibrary(string librayName);
...
iTest = LoadLibrary("D:\\...\\InterpretTempIntensity.dll"); //library de mon collègue
La première fois que j'exécute, il m'a affiché une textBox qui me dit qu'il manque la library X_UTW2.DLL ! A priori ça confirme l'origine du problème... Les exécutions suivantes il n'a plus rien dit par contre :s
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 29 avril 2011 à 09:18
La première fois que j'exécute, il m'a affiché une textBox qui me dit ...
Pas une textBox, une message box plutôt ! Enfin la petite fenêtre windows qui donne les erreurs ^^
Et petit détail qui à peut-être son importance : la fenêtre à un design windows 2000 ! Je sais pas du tout d'où elle sort !
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 29 avril 2011 à 14:04
Problème résolu !!!
Il existe un kit d'outil pour les commandes numériques NUM : NUMTools. J'ai cherché sur un ordi avec ces outils, j'ai trouvé dans le system32 la dll X_UTW2 (UTW comme unitel way), je me suis donc douté que c'était le NUMTool qui l'installait !
J'ai donc installé le kit NUMTools, j'ai bien retrouvé la dll dans system32 et j'ai enfin pu vérifier l'appel de ma dll !!! Il génère encore quelques erreures, mais je devrais m'en sortir.
En tout cas, merci pour ton dependancy walker, c'est lui qui m'a mis sur la piste ^^
a+
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 9 juin 2011 à 09:17
Salut !
Quand on post un nouveau message sur un forum, faut démarrer un nouveau topic, et dans le bon sujet !!!
Moi perso je m'y connais pas grand chose en BDD, mais retourne sur le forum, va dans le thème bases de données et ré-expose ton problème. Ici personne ne va retourner voir les messages, ce sujet est fermé et résolu !!!
raniach
Messages postés3Date d'inscriptionvendredi 20 mai 2011StatutMembreDernière intervention30 mai 2011 30 mai 2011 à 16:15
Bonjour a tous,
je suis une étudiante, je suis en stage de PFE et je essai de développer une application en C#.le problème ce que je veux créé un code pour authentification a partir de base de donnée , c.a.d quand en clic sur la boutant connexion il lit le données a partir de textbox et il les vérifier dans le base?
s'il vous plait pouvez vous m'aider ?
merci