nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004
-
15 juil. 2003 à 11:07
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004
-
23 juil. 2003 à 15:42
Voila,
j'ai un problème de conversion de prog C++ qui sert à décrypter une chaîne de caractère afin de l'authentifier.
J'ai essayer de le retranscrir en VB mais y a pas moyen du coup je suis complètement bloquer.Ci-joints la routine C++ et mon equivalent en VB si vous pourriez y jeter un oeil et me dire si il y a une faute ou si ce n'est pas retransriptible, et comment faire si ça ne l'est pas .En vous remerciant d'avance c'est très cool.
//la routine de calcul de CRC16 (usage: fichiers d'enregistrements)
///////////////////////////////
unsigned short calcCRC16(unsigned char* pBuffer,int nBufferLen)
{
const unsigned short usPoly=0x8408;
unsigned short usCRC=0;
int bParite;
int i,j;
//fonction principale
/////////////////////
int main(int argc,char* argv[])
{
char szBuffer[]= "2506031555224--------------------------S----1--------------------------------------------------";
unsigned short usCRC16;
Private Sub Command4_Click()
MsgBox calcCRC16("2506031555224--------------------------S----1--------------------------------------------------")
End
End Sub
Private Function calcCRC16(pBuffer As String) As String
Dim k, usCRC, usPoly As Long
Dim i, j, bParite As Integer
usCRC = 0
usPoly = &H8408
For k = 1 To (Len(pBuffer))
i = Asc(Mid(pBuffer, k, 1))
usCRC = (usCRC Xor i)
For j = 0 To 7
If (usCRC And 1) Then
bParite = 0
Else
bParite = 1
usCRC = (usCRC / 2)
'ligne problèmatique------------------------------------
'pourtant le code cplusplus suivant : usCRC>>=n
'equivaut bien à : usCRC = usCRC / 2^n
'Peut etre a cause du type unsigned short... a eclaircir
'-------------------------------------------------------
End If If (bParite 0) Then usCRC (usCRC Xor usPoly)
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 16 juil. 2003 à 16:08
merci de ton conseil je vais procédé comme ca mais je met quoi a la place de la chaine de caractère que j'ai mise dans le prog comment je fait pour transferer la chaine que je récupère avec Vb à la Dll.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 juil. 2003 à 16:16
si tu ne veux pas trop t'emmerder tu demandes char* en param dans la dll. Au niveau VB tu fais une declaration Byval String et VB saura qu'il doit passer son pointeur interne.
Sinon pour une dll specialisee pour VB on recoit du BSTR*.
BruNews, ciao...
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 17 juil. 2003 à 10:52
ok je te remercie bcp pour tes conseils,si je pe me permettre de t'embeter encore un peu; j'ai fait une dll test avec un fonction de somme en faisant ce que tu m'a dit mais le prog ne compil pas il me dit point d'entrée d'une dll introuvable dans ess2.dll.
Je te balance mon code si tu peux y jeter un oeil:
#include "stdafx.h"
#include "ess2.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
//ESS2_API int nEss2=0;
// This is an example of an exported function.
ESS2_API int fnEss2(void)
{
return 42;
}
// This is an example of an exported function.
extern "C" __stdcall int somme(int a, int b)
{
return (a+b);
}
// This is the constructor of a class that has been exported.
// see ess2.h for the class definition
CEss2::CEss2()
{
return;
}
////////////////////////////////////////////////////////
Public Declare Function somme Lib "ess2.dll" (ByVal Val1 As Integer, ByVal val2 As Integer) As Integer
voici la ligne que j'ai mise dans un module
Merci d'avance,ciao
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 juil. 2003 à 12:01
Prends l'habitude de faire un projet, exe ou dll, toujours VIDE donc sans headers precompiles et autres conneries de ce genre. Ceci a + forte raison pour une vraie dll, il faut un controle total sur le code.
donc #include "stdafx.h" a supprimer.
#include "ess2.h" y a quoi dedans ? ne devrait pas etre trop utile.
Alors on refait le ess2.cpp complet:
extern "C" int __stdcall somme(int a, int b)
{
return (a + b);
}
FINI pour le cpp, maintenant dnas Visual Studio tu fais nouveau fichier ess2.def.
LIBRARY ess2
EXPORTS
somme
ess2.def EST FINI, tu peux compiler.
BruNews, ciao...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 juil. 2003 à 12:05
AUTRE PRECISION IMPORTANTE !!!
dans VB declare fonction API de dll TOUJOURS As Long et NON le Integer de VB qui fait 16 bits et qui ne devrait plus etre employe depuis belles lurettes.
BruNews, ciao...
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 21 juil. 2003 à 09:58
ouais j' ai fait les modif d'après tes conseils pour la fonction somme ,ca a marcher, je suis passer à ma routine CRC16
et puis la erreur d'adresse je sais plus trop et VB s'est déchargé j'ai recommencé et maintenant il me dit que mon .dll est introuvable. je te balance ce que j'ai fait si tu voit un truc.c cool
return 1;
}
//la routine de calcul de CRC16 (usage: fichiers d'enregistrements)
///////////////////////////////
extern "C" unsigned short __stdcall calcCRC16(unsigned char* pBuffer,int nBufferLen)
{
const unsigned short usPoly=0x8408;
unsigned short usCRC=0;
int bParite;
int i,j;
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 juil. 2003 à 10:47
As String dans ta Declare VB pour calcCRC16 ???
Pas etonnant que VB par en vrille.
Un conseil en plus: retourne du 32 bits toujours et tu mets As Long dans VB. Un crc32 irait pas aussi bien ?
Si toujours probleme tu me dis et je te la ferai en asm.
BruNews, ciao...
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 21 juil. 2003 à 15:49
ok c cool merci ca a marché quand je l'ai testé sur mon prog vb test et une fois que je l'ai mis dans mon vrai prog il me renvoi ess2.dll fichier introuvable du coup j'ai tout virer et refai au propre mais c tj la meme chose,si t'as une idée
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 juil. 2003 à 11:31
ben SI que va bon une dll pour vb, suffit que la dll soit dans la currentdirectory ou dans system32, lui preferer le dossier du exe prog. Si tu testes en lancant depuis l'IDE vb alors currentdirectory pas bonne, lance en double cliquant sur exe.
Ensuite si tu veux la dll poste un mail:
bnutiles@wanadoo.fr
BruNews, ciao...