Limites de vb pour conv prog C++

nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 5 mai 2004 - 15 juil. 2003 à 11:07
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Derniè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;

if(pBuffer==0 || nBufferLen<=0)
return 0;

usCRC=0;
for(i=0;i<nBufferLen;i++)
{
usCRC^=pBuffer[i];
for(j=0;j<8;j++)
{
if(usCRC & 1)
bParite=0;
else
bParite=1;
usCRC>>=1;
if(!bParite)
usCRC^=usPoly;
}
}

return usCRC;
}

//fonction principale
/////////////////////
int main(int argc,char* argv[])
{
char szBuffer[]= "2506031555224--------------------------S----1--------------------------------------------------";
unsigned short usCRC16;

//résultat attendu AA9F
usCRC16=calcCRC16(&szBuffer[0],sizeof(szBuffer)-1);

printf("Texte: '%s'\nCRC16=%04X,szBuffer,usCRC16);
return 0;
}

voici maintenant mon prog vb

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)

Next j

Next k
calcCRC16 = Hex(usCRC)
End Function

14 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juil. 2003 à 12:40
C'est une drole d'idee de passer une routine CRC de C vers VB, tu vois le ralentissement ??? Fournis plutot la fonction en dll.
BruNews, ciao...
0
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Derniè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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juil. 2003 à 16:17
Une precision encore, declare bien ta fonction dans la dll:
extern "C" __stdcall
BruNews, ciao...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Derniè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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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:

#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
return 1;
}

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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Derniè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

voici mon .cpp

#include "windows.h"

BOOL WINAPI DllMain( HINSTANCE hDll,
DWORD dwreason,
LPVOID Reserved
)
{

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;

if(pBuffer==0 || nBufferLen<=0)
return 0;

usCRC=0;
for(i=0;i<(nBufferLen-1);i++)
{
usCRC^=pBuffer[i];
for(j=0;j<8;j++)
{
if(usCRC & 1)
bParite=0;
else
bParite=1;
usCRC>>=1;
if(!bParite)
usCRC^=usPoly;
}
}

return usCRC;
}

////////////////////////////////////////////////////////////////
voici ce que j'ai d"claré dans un module

Public Declare Function calcCRC16 Lib "ess2.dll" (ByVal Val1 As String, ByVal val2 As Long) As String

///////////////////////////////////
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Derniè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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 juil. 2003 à 16:03
On fait quoi ? Tu veux une dll exportant CRC ?
BruNews, ciao...
0
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 5 mai 2004
23 juil. 2003 à 11:16
oui c'est ce que je vuex mais ca ne marche pas dans mon vrai prog
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
nikostaf Messages postés 35 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 5 mai 2004
23 juil. 2003 à 15:42
c'et bon ca a marché je l'ai mise ds system32 et ça passe nikel.encore merci pour tout
0
Rejoignez-nous