NaNouk_X
Messages postés15Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 4 octobre 2007
-
3 oct. 2007 à 22:39
NaNouk_X
Messages postés15Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 4 octobre 2007
-
4 oct. 2007 à 23:03
Bonjour,
j'ai un problème et je n'ai aucune idée du pourquoi.
Voici:
j'ai une dll fait en c++ 6.0. je la test par une application vb6 et tout fonctionne bien.
Je fais un imports de la dll dans vb.net 2005 et rien ne fonctionne
Est-ce qu'il y a autre chose à faire qu'un imports en .net pour exécuter une dll 6.0 ?
j'ai le code source de la dite DLL mais le c++ n'est pas mon fort alors je me suis dis que je pouvais tout simplement refaire une dll en c++ 2005 mais encore la, j'ai pas le bon résultat à l'exécution. Donc il doit me manquer un petit quelque chose dans le c++ et comme je ne suis pas très fort en c++ j'aurais besoin d'un petit coup de main s.v.p.
si quelqu'un a une idée pour m'aider je vous en remerci d'avance.
kts_system
Messages postés25Date d'inscriptionvendredi 1 décembre 2006StatutMembreDernière intervention27 novembre 2018 4 oct. 2007 à 10:40
deja definit une classe pour ta dll, initialise tous a null ds le constructeur
Par ex cette classe va permettre d'exportrer 3 fct SetGlobal, setBDD et Load
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 4 oct. 2007 à 12:15
Pas besoin (ni même souhaitable) de classe pour exporter une fonction de DLL utilisable par tout langage.
Mets le nom de fonction dans un fichier DEF, la fonction en __stdcall et compile en C.
Voila ce qui devrait toujours être pour une DLL utilisable par tout langage.
Private
Shared
Function ideacbc(
ByVal pInputBuf
As
String,
ByVal pKey
As
String,
ByVal pOutputBuf
As
String,
ByRef KeyLen
As
Integer,
ByVal pSeed
As
String,
ByRef a5
As
Integer)
As
String
End
Function
voici dans les propriétés de la solution c++ 2005
Dynamic Library (.dll)
Use Standard Windows Libraries
Not Using ATL
No
Use Unicode Character Set
Common Language Runtime Support (/clr)
No Whole Program Optimization
est-ce qu'il a quelque chose la dedans qui ne serait pas bon à votre avis ?
merci beaucoup pour votre aide !
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 4 oct. 2007 à 17:11
KeyLen et a5, tu prends des pointeurs, c'est utile ? Modifies-tu leur valeur ?
Si est non alors prends direct la valeur, inutile de perdre du temps à déréférencer les pointeurs.
"si j'enlève le return est-ce que le pOutputBuf sera retourné..."
alors là faut sérieux te plonger dans un bouquin de C.
Soit on prend un buffer en param que la fonction remplira, soit on fait une alloc que l'appelant devra désallouer. La 1ere solution étant la plus sure.
NaNouk_X
Messages postés15Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 4 octobre 2007 4 oct. 2007 à 17:47
pour keylen et a5 non c¸a ne devrait pas être modifié donc pour la modif j'aurais juste besoin de changer *par ?
je sais je suis vraiment poche en C et quand ça parle de pointeur là c'est encore pire. Comme je veux juste utiliser cette dll qui était en c++6.0 avant et que je ne réussi pas à recevoir les bonnes infos je me suis dit que de la mettre en c++ 2005 serait pas si terrible à faire mais disons que je m'y perds. Je suis en spécialiste oracle et je me débrouille tres bien en VB.net.
Le bouquin de C très bonne idée mais j'en ai pas. mais je vais investir, je crois que ça va valloir la peine !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 4 oct. 2007 à 18:02
Comme je te disais, dans l'original on prend le buffer à remplir en param de la fonction.
Je me suis gourré dans la réponse plus haut, tu ne retournes pas un bufer local mais ce qu'on te passe en param, c'est donc seulement inutile mais pas invalide. J'avais confondu OutputBuf et pOutputBuf.
Si ça n'est fait que pour fournir une String à de l'interprété, ne prends rien en param et retourne un BSTR que tu fabriqueras depuis pOutputBuf avec SysAllocStringByteLen(), voir dans mes sources.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 4 oct. 2007 à 18:15
Autre conseil:
l'original n'est vraiment pas le must du code, Len() ne vaut pas mieux que le 'static char[]' de SHexToAscii(), passe sur autre chose dès que fini.
Exemple:
int Len(char *psz)
{
char *c = psz;
while(*c) c++;
return (c - psz);
}
NaNouk_X
Messages postés15Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 4 octobre 2007 4 oct. 2007 à 19:22
salut
dès que je réussirai a faire fonctionner cette foutue DLL, je regarderai pour le len et autre.
pour l'instant je me trouve vraiment très poche, mon résultat attendu n'est jamais bon
je me demande bien pourquoi la dll originale (le lien que j'ai mis dans mon autre post) fonctionne bien avec vb6 et que rendu en .net plus rien ne fonctionne.
s'il y a une âme charitable qui voudrais bien me faire une dll fonctionnel ça serait très apprécié.
un BSTR est-ce que .net transforme ça en string ou si faut que je marshall ?
merci de prendre le temps de m'aider j'appréci vraiment.
NaNouk_X
Messages postés15Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 4 octobre 2007 4 oct. 2007 à 23:03
ouf pas facile, je n'y arrive tout simplement pas. je n'ai vraiment pas assez de connaissance en C pour pouvoir faire la modification.
est-ce que tu serais assez gentil pour faire la modifiaction pour moi s.v.p. ?
merci, étant codeur je sais que je t'en demande beaucoup mais j'aimerais juste que cette dll fonctionne pour moi. si je réussi je vais pouvoir par la suite essayer de reprendre ce code et le transposer en vb poour le plaisir d'apprendre...