IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussions diverses VB Discussion :

Structure C équivalent en VB6


Sujet :

Discussions diverses VB

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Structure C équivalent en VB6
    Bonsoir tout le monde ,
    j'ai une structure en C et j'ai besoin de la modifier en VB6 puisque je suis en train de réaliser une interface en VB6.0 pour une DLL en C , le code en C est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    #define DATA_ARRAY  129
    struct ANSWER {
    	int iStatus;
    	unsigned char idata[DATA_ARRAY ];
    	int iBytes;
    };
     
    struct INSTRUCTION {
    	unsigned char iCode[DATA_ARRAY ];
    	int iBytes;
    };
     
    ANSWER ans_data;
    INSTRUCTION ins_data;
    je l'ai modifiée en VB6 comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Private Const DATA_ARRAY  = 129
     
    Private Type ANSWER
    iStatus as long
    idata[DATA_ARRAY ] as long 
    iBytes As long 
    End Type
     
    Type INSTRUCTION {
    	 iCode[DATA_ARRAY ] as long
    	 iBytes as long
    End type
     
     ans_data ANSWER
     ins_data INSTRUCTION
    mais ce code VB6 ne fonctionne pas et je sais pas où se trouve le problème.

    Merci de me rendre service et me répondre.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour ,

    remplace les crochets [] par des parenthèses () , supprime les accolades { }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idata(DATA_ARRAY) As Long

  3. #3
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonsoir,

    La déclaration d'une variable typée en vb doit toujours comporter la clause: As.
    Par ailleurs, le type char correspond au type Byte en vb
    rectifie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ....
    idata(DATA_ARRAY) As Byte
     
    ...ans_data As ANSWER
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci pour votre réponse,

    mais malheureusement pour cette ces instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ans_data As ANSWER
    ins_data As INSTRUCTION
    me donne une erreur de complitaion : instruction non valide en dehors du bloc type.

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    salut,


    il manque le "Dim"...

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour vos réponses mon problème de fonctionnement de code persiste toujours.

    je vous donne une idée générale sur le programme, en fait c'est un programme de commande et supervision avec WinCC qui fonctionne parfaitement avec 0 erreur. quand je le reprogramme avec VB6il ne me donne rien (je parle des fonctions .dll utilisés).
    le code Wincc fonctionnel est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    #include "apdefap.h"
    void OnObjectChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {BOOL s5;
    s5= GetTagBit("ST2_S5_1");	//Return-Type: BOOL 
    if (s5 == 1)
    {
    BOOL rfid;
    rfid = GetTagBit("RFID");	//Return-Type: BOOL 
    if (rfid == 0 ) 
    {
     
    }
    else if ( rfid == 1)
    {
    #define DATA_ARRAY  129
    long int s;
    int i,k,A1;	
    char buffer[3],a[9], tmp[20];
    char data[DATA_ARRAY ];
    char input[DATA_ARRAY ];
    char text1[] ="palette 1";
     
    struct ANSWER {
    	int iStatus;
    	unsigned char idata[DATA_ARRAY ];
    	int iBytes;
    }ans_data;
     
    struct INSTRUCTION {
    	unsigned char iCode[DATA_ARRAY ];
    	int iBytes;
    }ins_data;
     
     
    #pragma code("RFID_VC_VB1.dll")
     
     short int  Evaluation_unit_quit(BOOL Mode,int ncom);
     short int  Evaluation_unit_reset(BOOL Mode,int ncom);
    short int  System_memory_examine(BOOL Mode,int ncom, char* status);
     short int  Data_medium_type_adjust(BOOL Mode,int ncom, char* data_medium);
     short int  Double_sided_read_letter_active(BOOL Mode,int ncom);
     short int  Autoread_letter_terminate(BOOL Mode,int ncom);
    short int  Version_message(BOOL Mode,int ncom, char* version);
    int  Comset(int iPort, int iBaud, int iBits, int iStop, int iParity, int iTimeout);
     short int  Data_medium_read(BOOL Mode,int ncom, char* head, char* status, char* data);
     int  ComReset(int iPort);
     short int  Bytes_write(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data);
     short int  Byte_read(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data);
     short int  Reset(BOOL Mode,int ncom, char* head, char* status); 
     void  Check_total_compute(void);
    BOOL  Send(int ncom);
     BOOL Receive(int ncom); 
    void ShiftLeft(unsigned char* data, int place);
    void ArrayCopy(char* dest, unsigned char* source, int place);
     int HexToInt(char* hex);
     BOOL Receive1(int ncom);
     
    #pragma code()
     
     
    printf("\t\t\t\tProgramme d'exploitation des RFID\n\n");
    printf("\t\t\t\tLECTURE PALETTE 1\n\n");
    Comset(1,9600,8,1,0,20);
     
    Evaluation_unit_quit(FALSE,1);
    Evaluation_unit_reset(FALSE,1);
    Data_medium_type_adjust(FALSE, 1,"4");
     
    Byte_read(TRUE,1, "2", buffer, "00", "09", data);
     
     
     
    	for ( i = 0; i < 10; i++) 
    	{
    		a[i] = data[i];
    		printf("%c", a[i]);
     
    	} //if (a=(s.c_str()));
     
     
    printf("\n comparaison des chaines de caracters:  \t%s, et ,\t%s \n",a,text1);
    A1= strcmp(a,text1);
    printf("A 1=%d",A1);
     
    if (A1==0)
    {
    SetTagBit("ST1_entrer_Z3_P1",1);	//Return-Type: BOOL 
     
    }
    else
    {SetTagBit("OUI",0);
     
     
     
    } 
    ComReset(1);
    }
    }
     
     
    }

    le code VB6 non fonctionnel est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Private Const DATA_ARRAY = 129
     
    Private Type ANSWER
    iStatus As Long
    idata(DATA_ARRAY) As Long
    iBytes As Long
     
    End Type
     
    Private Type INSTRUCTION
         iCode(DATA_ARRAY) As Long
         iBytes As Long
     
    End Type
     
    Dim ans_data As ANSWER
    Dim ins_data As INSTRUCTION
     
    Dim d1, ccc, cc, d As Long
    Dim hj As Integer
    Private Declare Function Comset Lib "RFID_VC_VB1.dll" (ByVal iPort As Integer, ByVal iBaud As Integer, ByVal iBits As Integer, ByVal iStop As Integer, ByVal iParity As Integer, ByVal iTimeout As Integer) As Long
    Private Declare Function ComReset Lib "RFID_VC_VB1.dll" (ByVal iPort As Integer) As Long
    Private Declare Function Evaluation_unit_quit Lib "RFID_VC_VB1.dll" (ByVal Mode As Boolean, ByVal ncom As Integer) As Long
    Private Declare Function Evaluation_unit_reset Lib "RFID_VC_VB1.dll" (ByVal Mode As Boolean, ByVal ncom As Integer) As Long
    Private Declare Function Data_medium_type_adjust Lib "RFID_VC_VB1.dll" (ByVal Mode As Boolean, ByVal ncom As Integer, ByVal data_medium As String) As Integer
    Private Declare Function Bytes_write Lib "RFID_VC_VB1.dll" (ByVal Mode As Boolean, ByVal ncom As Integer, ByVal head As String, ByVal buffer As String, ByVal adresse As String, ByVal number As String, ByVal DATA As String) As Long
    Private Declare Function Byte_read Lib "RFID_VC_VB1.dll" (ByVal Mode As Boolean, ByVal ncom As Integer, ByVal head As String, ByVal status As String, ByVal adresse As String, ByVal number As String, ByVal DATA As String) As Long
    Private Declare Function HexToInt Lib "RFID_VC_VB1.dll" (ByVal hex As String) As Long
    Private Declare Function Send Lib "RFID_VC_VB1.dll" (ByVal ncom As Integer) As Boolean
    Private Declare Function Receive Lib "RFID_VC_VB1.dll" (ByVal ncom As Integer) As Boolean
    Private Declare Function ArrayCopy Lib "RFID_VC_VB1.dll" (ByVal dest As String, ByVal source As String, ByVal place As Integer)
     
    Private Declare Function Check_total_compute Lib "RFID_VC_VB1.dll" ()
    Set ST1_S5 = OPCMygroup.OPCItems(21)
    ST1_S5.Read OPCDevice
    If (ST1_S5.Value = "Vrai") Then
    '***************************************
     
     
     
     
    Dim donnée, DATAA, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7 As String
    Dim lettre, lettre1, lettre2, lettre3, lettre4, lettre5, lettre6, lettre7  As String
    Dim i As Integer
     
    d1 = Comset(1, 9600, 8, 1, 0, 20)
    ccc = Evaluation_unit_quit(True, 1)
     
    cc = Evaluation_unit_reset(True, 1)
     
    hj = Data_medium_type_adjust(True, 1, "4")
     
    d = Byte_read(True, 1, "2", "00", "00", "16", donnée)
     
     For i = 1 To 10
        lettre1 = Mid(donnée, i, 1)        '
    Next i
    Text2.Text = lettre1
    '**********************

    merci de me répondre .

  7. #7
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonjour,

    Ne connaissant pas le fonctionnement interne des codes importés il est difficile de te dire comment tu devrais procéder.
    Ce n'est pas facile de te guider si tu ne connais pas les bases du langage.
    La correspondance des déclarations de tes types Answer ... ne sont pas conformes.

    Le point d'entrée de tout code executable en VB commence par:
    Sub Mon_code_executableName() et se termine par End Sub correspond aux delcaration du genre void nom_methode()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function Mon_executableName() as Long
     ici le corps de la procédure ou sont écrites les instructions
     
     End Function
    semblable aux déclarations int nom_calcul().

    Une déclaration de variables sur une ligne non suivi da la clause As est implicitement interprété en Variant.
    Dim i, n, s As Integer Sur cette ligne s est du type spécifié, alors que i et n sont automatiquement interprétés en Variants.

    Ici tous sont du type Integer: Dim i As Integer, n As Integer, s As Integer.

    Set ST1_S5 = OPCMygroup.OPCItems(21) D'où sort cet objet et la déclaration de ST1_S5 ?

    Ensuite pour passer une chaine à une fonction écrite en c, qui attend un tableau de caractères, il faut dimensionner la chaine en ayant à l'esprit les règles spécifiques au c.
    En Vb on peut à tout instant donner une longueur quelconque à une variable de String à l'aide de la fonction String.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim lecture as String
    lecture = String("*", DATA_ARRAY)
    Pour sortir ton épingle du jeu, je te propose de faire une semaine d'apprentissage du langage dans un des excellents tutos disponibles sur le site dev. Ce ne sera pas difficile pour quelqu'un qui connait déjà les rigueurs de la programmation en C.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    pour cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ST1_S5 = OPCMygroup.OPCItems(21)
    elle est en relation avec OPC kepserver.

    le problème que le fichier dll est programmé par une autre personne et il a passée un longue période pour le préparer. et mon tache au cours de ce projet de manipuler les fonctions dll avec Wincc et qui était réussi et avec VB6 qui cause encore un problème.

    est ce que un fichier dll généré par dev c peut fonctionner correctement sur VB6 ou il y a quelques trucs qu'on doit les changer au cours de l'appelle.

    voila le code du fichier dll peut etre il peut vous donner un idée sur le principe de fonctionnement du fichier pour que vous pouvez m'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
     
    #include <windows.h>
    #include <math.h>
    #include <stdio.h>
    #include <conio.h>
    #include "comtools.h"
     
    #define DATA_ARRAY  129
    extern "C" __declspec(dllexport) short int _stdcall Evaluation_unit_quit(BOOL Mode,int ncom);
    extern "C" __declspec(dllexport) short int _stdcall Evaluation_unit_reset(BOOL Mode,int ncom);
    extern "C" __declspec(dllexport) short int _stdcall System_memory_examine(BOOL Mode,int ncom, char* status);
    extern "C" __declspec(dllexport) short int _stdcall Data_medium_type_adjust(BOOL Mode,int ncom, char* data_medium);
    extern "C" __declspec(dllexport) short int _stdcall Double_sided_read_letter_active(BOOL Mode,int ncom);
    extern "C" __declspec(dllexport) short int _stdcall Autoread_letter_terminate(BOOL Mode,int ncom);
    extern "C" __declspec(dllexport) short int _stdcall Version_message(BOOL Mode,int ncom, char* version);
    extern "C" __declspec(dllexport) int _stdcall Comset(int iPort, int iBaud, int iBits, int iStop, int iParity, int iTimeout);
    extern "C" __declspec(dllexport) short int _stdcall Data_medium_read(BOOL Mode,int ncom, char* head, char* status, char* data);
    extern "C" __declspec(dllexport) int _stdcall ComReset(int iPort);
    extern "C" __declspec(dllexport) short int _stdcall Bytes_write(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data);
    extern  "C" __declspec(dllexport) short int _stdcall Byte_read(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data);
    extern "C" __declspec(dllexport) short int _stdcall Reset(BOOL Mode,int ncom, char* head, char* status); 
    extern  "C" __declspec(dllexport) void _stdcall Check_total_compute(void);
    extern "C" __declspec(dllexport) BOOL _stdcall Send(int ncom);
    extern "C" __declspec(dllexport) BOOL _stdcall Receive(int ncom); 
    extern "C" __declspec(dllexport) void _stdcall ShiftLeft(unsigned char* data, int place);
    extern "C" __declspec(dllexport) void _stdcall ArrayCopy(char* dest, unsigned char* source, int place);
    extern "C" __declspec(dllexport) int _stdcall HexToInt(char* hex);
    extern "C" __declspec(dllexport) BOOL Receive1(int ncom); 
     
     
    struct ANSWER {
    	int iStatus;
    	unsigned char idata[DATA_ARRAY ];
    	int iBytes;
    };
     
    struct INSTRUCTION {
    	unsigned char iCode[DATA_ARRAY ];
    	int iBytes;
    };
     
    ANSWER ans_data;
    INSTRUCTION ins_data;
     
    BOOL Receive1(int ncom) {
         return(FALSE);
         }
     
     
     
    BOOL _stdcall Send(int ncom)
    {
    	Check_total_compute();
     
    	for (int i=0; i < ins_data.iBytes; i++) {
    		if (::writedata(ncom, ins_data.iCode[i]) == FALSE) {return FALSE;}		
    	}
     
    	return TRUE;
    }
     
    BOOL _stdcall Receive(int ncom)
    {
    	BYTE Check_total = 0;
    	BYTE c;
     
    	for (int i=0; i < ans_data.iBytes - 2 ; i++) 
    	{
    		::readdata(ncom, &c);	
    		ans_data.idata[i] = c;
    		Check_total = (unsigned char) (Check_total + ans_data.idata[i]);
    	}
     
    	::readdata(ncom, &c);	
    	ans_data.idata[ans_data.iBytes - 2] = c;
     
    	::readdata(ncom, &c);	
    	ans_data.idata[ans_data.iBytes - 1] = c;
     
    	if (ans_data.idata[ans_data.iBytes - 2] != Check_total) 
    	{
    		return FALSE;
    	}
     
    	return TRUE;
    }
     
    void _stdcall Check_total_compute(void)
    {
    	BYTE Check_total = 0;
     
    	for (int i=0; i < ins_data.iBytes; i++) 
    	{
    		Check_total = (unsigned char) (Check_total + ins_data.iCode[i]);
    	}
     
    	ins_data.iCode[ins_data.iBytes] = Check_total;
    	ins_data.iBytes++;
    	ins_data.iCode[ins_data.iBytes] = 3;
    	ins_data.iBytes++;
    }
     
    void _stdcall ShiftLeft(unsigned char* data, int place)
    {
    	for (int j=0; j < place; j++) 
    	{
    		for (int i=0; i < DATA_ARRAY ; i++) 
    		{
    			*(data + i) = *(data + 1 + i);
    		}
    	}
    }
     
    void _stdcall ArrayCopy(char* dest, unsigned char* source, int place)
    {
    	for (int i=0; i < place; i++) 
    	{
    		*(dest + i) = (char) (*(source + i));
    	}
    }
     
    int _stdcall HexToInt(char* hex)
    {
    	int Length = strlen(hex);
    	int decimal = 0, z_number;
     
    	for (int i=0; i < Length; i++) 
    	{
    		if ((hex[i] >= 0x30) && (hex[i] <= 0x39)) 
    		{
    			z_number = hex[i] - 0x30;
     
    		} else if ((hex[i] >= 0x41) && (hex[i] <= 0x46)) 
    		{
    			z_number = hex[i] - 0x41 + 10;
     
    		} else if ((hex[i] >= 0x61) && (hex[i] <= 0x66)) 
    		{
    			z_number = hex[i] - 0x61 + 10;
     
    		} else 
    		{
    			z_number = 0;
    			printf("Error during transformation Hex in Int");
    		}
     
    		decimal = decimal + (int) (pow(16, Length - i - 1) * z_number);
     
    	}
    	return decimal;
    }
     
    //system instructs
     
    short int _stdcall System_memory_examine(BOOL Mode,int ncom, char* status)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Mode
    		ins_data.iCode[0] = 'C';
    	} else {		// Single-Mode
    		ins_data.iCode[0] = 'c';
    	}
     
    	if (Send(ncom)) {
     
    		ans_data.iBytes		= 5;
     
    		if (Receive(ncom)) {
     
    			ShiftLeft(ans_data.idata, 1);
     
    			status[0] = ans_data.idata[0];
    			status[1] = ans_data.idata[1];
    			status[2] = '\0';
     
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    short int _stdcall Data_medium_type_adjust(BOOL Mode,int ncom, char* data_medium)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 2;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'D';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'd';
    	}
     
    	ins_data.iCode[1] = data_medium[0];
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    short int _stdcall Double_sided_read_letter_active(BOOL Mode,int ncom)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'B';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'b';
    	}
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    short int _stdcall Evaluation_unit_reset(BOOL Mode,int ncom)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'O';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'o';
    	}
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
    			bAllesOk = TRUE;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    short int _stdcall Autoread_letter_terminate(BOOL Mode,int ncom)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'Q';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'q';
    	}
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    short int _stdcall Version_message(BOOL Mode,int ncom, char* version)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'V';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'v';
    	}
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 7;
     
    		if (Receive(ncom)) {
    			version[0] = ans_data.idata[1];
    			version[1] = ans_data.idata[2];
    			version[2] = ans_data.idata[3];
    			version[3] = ans_data.idata[4];
    			version[4] = '\0';
     
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;		
    }
     
    int _stdcall Comset(int iPort, int iBaud, int iBits, int iStop, int iParity, int iTimeout)
    {
    	return comset(iPort, iBaud, iBits, iStop, iParity, iTimeout, 1, 0, NULL);
    }
     
    int _stdcall ComReset(int iPort)
    {
    	return comreset(iPort);	
    }
     
    //write/ read instructions
     
    short int _stdcall Data_medium_read(BOOL Mode,int ncom, char* head, char* status, char* data) 
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 2;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'A';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'a';
    	}
     
    	ins_data.iCode[1] = head[0];
     
    	if (Send(ncom)) {
     
    		if ((head[0] == 'x') || (head[0] == 'X')) {
     
    		} else {
     
    			ans_data.iBytes		= 37;
     
    			if (Receive(ncom)) {
     
    				ShiftLeft(ans_data.idata, 1);
     
    				status[0] = ans_data.idata[0];
    				status[1] = ans_data.idata[1];
    				status[2] = '\0';
     
    				ShiftLeft(ans_data.idata, 2);
    				ArrayCopy(data, ans_data.idata, 32);
     
    				bAllesOk = 1;		
    			} 
    		}
    	}
     
    	return bAllesOk;			
    }
     
    short int _stdcall Bytes_write(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 6 + HexToInt(number);
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'K';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'k';
    	}
     
    	ins_data.iCode[1] = head[0];
    	ins_data.iCode[2] = adresse[0];
    	ins_data.iCode[3] = adresse[1];
    	ins_data.iCode[4] = number[0];
    	ins_data.iCode[5] = number[1];
     
    	for (int i=0; i < HexToInt(number); i++) {
    		ins_data.iCode[6 + i] = data[i];
    	}
     
    	if (Send(ncom)) {
     
    		ans_data.iBytes		= 5;
     
    		if (Receive(ncom)) {
     
    			ShiftLeft(ans_data.idata, 1);
     
    			status[0] = ans_data.idata[0];
    			status[1] = ans_data.idata[1];
    			status[2] = '\0';
     
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;			
    }
     
    short int _stdcall Byte_read(BOOL Mode,int ncom, char* head, char* status, char* adresse, char* number, char* data)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 6;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'W';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'w';
    	}
     
    	ins_data.iCode[1] = head[0];
    	ins_data.iCode[2] = adresse[0];
    	ins_data.iCode[3] = adresse[1];
    	ins_data.iCode[4] = number[0];
    	ins_data.iCode[5] = number[1];
     
    	if (Send(ncom)) {
     
    		ans_data.iBytes		= 5 + HexToInt(number);
     
    		if (Receive(ncom)) {
     
    			ShiftLeft(ans_data.idata, 1);
     
    			status[0] = ans_data.idata[0];
    			status[1] = ans_data.idata[1];
    			status[2] = '\0';
     
    			ShiftLeft(ans_data.idata, 2);
    			ArrayCopy(data, ans_data.idata, HexToInt(number));
     
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;			
    }
     
    short int _stdcall Reset(BOOL Mode,int ncom, char* head, char* status)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 2;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'H';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'h';
    	}
     
    	ins_data.iCode[1] = head[0];
     
    	if (Send(ncom)) {
     
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
     
    			ShiftLeft(ans_data.idata, 1);
     
    			status[0] = ans_data.idata[0];
    			status[1] = ans_data.idata[1];
    			status[2] = '\0';
     
    			bAllesOk = 1;		
    		} 
    	}
     
    	return bAllesOk;			
    }
    short int _stdcall Evaluation_unit_quit(BOOL Mode,int ncom)
    {
    	short int bAllesOk = 0;
     
    	ins_data.iBytes = 1;
     
    	if (Mode) {	// Auto-Modus
    		ins_data.iCode[0] = 'Q';
    	} else {		// Single-Modus
    		ins_data.iCode[0] = 'q';
    	}
     
    	if (Send(ncom)) {
    		ans_data.iBytes		= 3;
     
    		if (Receive(ncom)) {
    			bAllesOk = TRUE;		
    		} 
    	}
     
    	return bAllesOk;		
    }

    merci pour votre compréhension et votre aide .

  9. #9
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonsoir,

    est ce que un fichier dll généré par dev c peut fonctionner correctement sur VB6 ou il y a quelques trucs qu'on doit les changer au cours de l'appelle.
    je n'ai jamais essayé., je penses que oui.

    j'insiste sur la nécessité pour toi d'apprendre rapidement les rudiments vb.

    Côté déclaration des fonctions de ta dll, je vais essayer de voir comment les traduire en VB.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci encore une fois NVCfrm.

    en fait ma formation en VB6 est une autoformation c'est pour cela que j'ai pas d'idées sur quelques détails importants, et je suis entrain de lira des doc et cours sur VB mais parfois on ne trouve pas nos besoins. j'ai trouvé ce lien les API VB6: http://www.sharevb.net/Les-API-en-VB6.html est ce que c'est toujours valable ?

    Merci

  11. #11
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonsoir tatawissa
    Citation Envoyé par tatawissa Voir le message
    Merci encore une fois NVCfrm.

    en fait ma formation en VB6 est une autoformation c'est pour cela que j'ai pas d'idées sur quelques détails importants, et je suis entrain de lira des doc et cours sur VB mais parfois on ne trouve pas nos besoins. j'ai trouvé ce lien les API VB6: http://www.sharevb.net/Les-API-en-VB6.html est ce que c'est toujours valable ?

    Merci
    pour apprendre les bases, il ne faut surtout pas cibler un besoin. Penses plutôt à une prise en main te permettant par la suite de cibler efficacement les besoins.
    Une consultation rapide du lien me fait dire que tu as trouvé une bonne référence pour les manipulations de tes fonctions externes en VB.

    J'ai pris du retard.

    j'avais fait ce matin 2 versions de traduction possible, et mijoter quelques techniques de codage simple pour tu t'en inspires un petit peu.
    Hélas mauvaise manœuvre. fermeture du fichier d'édition sans enregistrement. un temps que je ne pouvais encore offrir de nouveau à la chose.
    Toutefois une proposition rapide ce soir avec quelques codes démonstratifs appliqués sur une api.
    Les déclarations que tu devrais essayer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    Private Declare Function Comset Lib "RFID_VC_VB1.dll" ( _
                    ByVal iPort As Long, _
                    ByVal iBaud As Long, _
                    ByVal iBits As Long, _
                    ByVal iStop As Long, _
                    ByVal iParity As Long, _
                    ByVal iTimeout As Long) As Long
     
    Private Declare Function ComReset Lib "RFID_VC_VB1.dll" ( _
                    ByVal iPort As Long) As Long
     
    Private Declare Function Evaluation_unit_quit Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long) As Long
     
    Private Declare Function Evaluation_unit_reset Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long) As Long
     
    Private Declare Function System_memory_examine Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal status As String) As Long
     
    Private Declare Function Data_medium_type_adjust Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal data_medium As String) As Long
     
    Private Declare Function Double_sided_read_letter_active Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal buffer As String, _
                    ByVal adresse As String, _
                    ByVal number As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Autoread_letter_terminate Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal buffer As String, _
                    ByVal adresse As String, _
                    ByVal number As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Version_message Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal buffer As String, _
                    ByVal adresse As String, _
                    ByVal number As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Bytes_write Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal buffer As String, _
                    ByVal adresse As String, _
                    ByVal number As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Byte_read Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal status As String, _
                    ByVal adresse As String, _
                    ByVal number As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Data_medium_read Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal status As String, _
                    ByVal data As String) As Long
     
    Private Declare Function Reset Lib "RFID_VC_VB1.dll" ( _
                    ByVal Mode As Long, _
                    ByVal nCom As Long, _
                    ByVal head As String, _
                    ByVal status As String) As Long
     
    Private Declare Function Send Lib "RFID_VC_VB1.dll" ( _
                    ByVal nCom As Long) As Long
     
    Private Declare Function Receive Lib "RFID_VC_VB1.dll" ( _
                    ByVal nCom As Long) As Long
     
    Private Declare Function HexToInt Lib "RFID_VC_VB1.dll" ( _
                    ByVal hex As String) As Long
     
    Private Declare Sub Check_total_compute Lib "RFID_VC_VB1.dll" ()
     
    Private Declare Sub ArrayCopy Lib "RFID_VC_VB1.dll" ( _
            ByVal dest As String, _
            ByVal source As String, _
            ByVal place As Long)
     
    Private Declare Sub ShiftLeft Lib "RFID_VC_VB1.dll" ( _
            ByVal data As String, _
            ByVal place As Long)
     
     
    Const DATA_ARRAY = 129
     
    Private Type ANSWER
        iStatus As Long
        idata(DATA_ARRAY) As Byte
        iBytes As Long
    End Type
     
    Private Type INSTRUCTION
         iCode(DATA_ARRAY) As Byte
         iBytes As Long
    End Type
     
    Dim ans_data As ANSWER
    Dim ins_data As INSTRUCTION
     
    Sub test()
        	Dim data$, source$, dest$, hex$, head$, statut$, adresse$, number$, buffer$, data_medium$
    	Dim iPort&, iBaud&, iBits&, iStop&, iParity, iTimeout, Mode&, nCom&
     
    End Sub
    Il te faut retenir ces quelques notions. VB passe par défaut les arguments par référence (adresse).
    fonctions non supportées:
    - VarPtr - Renvoie l'adresse d'une variable.

    - VarPtrArray - Renvoie l'adresse d'un tableau.

    - StrPtr - Renvoie l'adresse du tampon de chaîne UNICODE.

    - VarPtrStringArray - Renvoie l'adresse d'un tableau de chaînes. (nécessite d'avoir la dll présente.)

    - ObjPtr - Renvoie un pointeur sur l'interface référencée par une variable objet. (Utilisé généralement dans les collections.)
    celles ci dans certains cas sont utiles pour des appels renvoyant un pointeur.

    Quelques exemples avec les chaines
    La fonction suivante n'a rien à voir avec les api
    C'est pour te familiariser avec les manipulations de chaînes en vb et les mots clés. Elle fait la même chose qu'une fonction existante: Instr.
    Il s'agit de renvoyer la position d'une chaine ou d'un caractère dans une chaine avec des arguments optionnels.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Function Position_Texte( _
                        texte_Source As String, _
                        texte_Chercher As String, _
                        Optional debut_Recherce As Long = 1, _
                        Optional fin_Recherche As Long, _
                        Optional CompareMode As VbCompareMethod = vbTextCompare) As Long
     
        Dim txBase As Long, txTest As Long, track As Long
     
        If Len(texte_Source) < Len(texte_Chercher) Then Exit Function
     
        If CompareMode = vbTextCompare Then
            texte_Source = UCase(texte_Source)
            txTest = UCase(txTest)
        End If
     
        Do
            track = track + 1
            If Mid(texte_Source, track, txTest) = texte_Chercher Then
                Position_Texte = track
                Exit Function
            End If
     
        Loop Until track + txTest > txBase
     
    End Function
    Ecrire une fonction par exemple qui fait la même chose que la Fonction Mid en VB6 on serait tenté avec une api
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef pDst As Any, ByRef pSrc As Any, ByVal ByteLen As Long)
    il est toujours préférable de travailler avec des tableaux de taille dynamique pour ne pas gaspiller les ressources sauf cas exceptionnel.
    La fonction suivante réalise l'extrait de texte dont tu as besoin à l'aide de CopyMemory.
    Un tableau Byte est dimensionné sur la longueur attendu par soustraction des arguments.
    CopyMemory reçoit en paramètre destination l'adresse du premier élém de ce tableau, en source la chaine, et la longueur à copier.
    On pourrait penser à une boucle pour la suite, mais l'objectif étant de démontrer les variantes possibles avec cette api, on l'appelle à nouveau pour récopier dans les valeurs de la chaine à renvoyer, les valeurs du tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Function Portion(Texte As String, _
    		ByVal minPosit As Long, _
    		ByVal maxPosit As Long) As String
     
        Dim result As String, taille() As Byte, subPortion() As String, n As Long, poids As Long
        Dim fragment As String
        n = Len(Texte)
     
        ReDim taille(1 To n + 1)
        CopyMemory taille(1), ByVal Texte, n 
     
        If (minPosit <= n) And (minPosit <= maxPosit) And (maxPosit <= n) Then _
            result = String(maxPosit - minPosit, "*"): _
            CopyMemory ByVal result, taille(minPosit + 1), maxPosit + 1
     
        Portion = result
     
    End Function
    Déterminer la présence d'une chaine ou un caractère dans une autre à l'aide de la fonction Replace de vb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test = Occurences("ou", "toujours") 'cet appel renverra 2. il y a deux "ou" dans ce mot.
    Function Occurences(trouver As String, source As String) As Long
        Occurences = (Len(regarder) - Len(Replace(regarder, trouver, ""))) / Len(trouver)
    End Function
    Il y aune fonction Split qui permet d'obtenir un tableau renvoyant la distribution d'une chaine en lui fournissant l'argument séparateur.
    Une fonction pouvant renvoyer un tableau d'un mot n'existe pas. On peut la créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function Explose(Texte As String) As Variant
        'renvoi un tableau à une dimension correspondant au code d'un caratère du texte dont la longuer est inférieure à 1024:
        '
        Dim tb() As Byte
     
        ReDim tb((Len(Texte) - 1024 / 1024))
     
        CopyMemory tb(0), ByVal Texte, (UBound(tb) + 1)
     
        Explose = tb
     
    End Function
    Les éléments du tableau renvoyés peuvent être lus sous forme de caractères à l'aide de la fonction Chr

    En supposant qu'on ai une api qui nous renvoit une chaine sous cette forme. La conversion de ce tableau avec une chaine peut se faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function Regroupe(tbCar) As String
        'reunit un tableau contenant des données de type byte réprésentant les codes ASCII
        Dim res As String, tmp() As Byte, l As Long
     
        tmp = tbCar 'conversion de tbcar (variant) vers un tableau de type Byte
        l = UBound(tmp)
        res = Space(l + 1)
     
        CopyMemory ByVal res, tmp(0), (l + 1)
     
        Regroupe = res
     
    End Function
    Voilà, ce sera tout pour le moment sur quelques notions utiles dans les manipulations de chaines avec une api.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    d'accord je vais faire des essais et j'espère qu'il fonctionne

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    malheureusement toujours sans résultat

  14. #14
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bonsoir tatawissa,
    Citation Envoyé par tatawissa Voir le message
    malheureusement toujours sans résultat
    Navré. Je ne sais pas comment t'aider.
    Je ne t'ai fait juste qu'une forme des déclarations possibles avec ton fichier.
    Je suppose que la dll est installée dans le répertoire system32.
    Et que naturellement tu as dû l'ajouter aux références du projet VB. (Un linkage comme on le fait avec les compilateurs C )

    J'aurais bien voulu essayé de prendre le temps à fond de comprendre le fonctionnement des codes pas documentés que tu as publié, ou même généré à mon niveau la DLL pour pouvoir tester les déclarations et les manip avec VB. Mais le code est incomplet. Il manque les fichier "comtools".
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  15. #15
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonjour,
    en lisant tout à l'heure une question posée par un internaute sur les pointeurs de tableau à passer à une fonction c++ sous vba, je me suis rappelé de ton problème.
    Il y a des choses que je n'ai pas pris la peine de demander, oubliant qu'en fait tu ne connais strictement rien au vb.

    Ajouter la référence de ta lib suppose que c'est une bibliothèque de type avec un fichier .def correctement defini. Ceci permet de dispenser le développeur des déclarations d'Api.

    Dans les déclarations d'appel, pour tes essais tu dois avoir la dll dans un répertoire visible pour le compilo, ou définir explicitement le chemin complet de la lib dans l'argument Lib Name de la déclaration.
    sans oublié dans l'argument Alias le nom décoré fourni par le compilateur.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  16. #16
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci infiniment NVCfrm

    je ctrouve souvent dans les exemples d'appel et utilisation des dll que chaque fonction se trouve dans une commande événementielle seule est ce que c'est obligatoire? et si j’appelle la fonction sans bouton de commande est ce que ça fonctionne ?

    le Boolean en C devient Long en VB6, au cours de l'appel de la fonction est que je mets ((true or false) ou (0 or -1))?

    le fichier "Comtools" est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
      #pragma warning(disable:4201)
    #pragma warning(disable:4514)
     
    #include <windows.h>
    #include <stdio.h>
     
    #include "comtools.h"
     
    //**********************************************************************************************
     
    unsigned char *comin_buf[MAXCOMPORTS]; // Ringbuffer for arriving data
     
    //unsigned char *comout_buf[MAXCOMPORTS]; // Ringbuffer for sending data
     
    int  comin_z1[MAXCOMPORTS];
    int  comin_z2[MAXCOMPORTS];
     
    //int  comout_z1[MAXCOMPORTS];
    //int  comout_z2[MAXCOMPORTS];
     
    unsigned char comin_error[MAXCOMPORTS];
    HANDLE hCom[MAXCOMPORTS];
     
    DCB dcb[MAXCOMPORTS];
     
    DWORD COMTIMEOUT[MAXCOMPORTS];
    DWORD dwThreadId[MAXCOMPORTS];
     
    HANDLE hThread[MAXCOMPORTS];
     
    OVERLAPPED comReadOverlapped[MAXCOMPORTS];
    OVERLAPPED comWriteOverlapped[MAXCOMPORTS];
     
    DWORD dwOutThreadId[MAXCOMPORTS];
     
    HANDLE hOutThread[MAXCOMPORTS];
     
    DWORD dwComNum;
     
    int ComReadError;
    int ComWriteError;
    int ComSetError;
     
    unsigned long tcount7;
     
    DWORD WINAPI ReadComData1(LPVOID lpCom);
    DWORD WINAPI ReadComData2(LPVOID lpCom);
     
     
    //**********************************************************************************************
     
    unsigned int ComportAdresse(int nr)
    {  
       unsigned int com;
     
       //it is to return whether the indicated interface exists; if not ZERO
     
       switch(nr)
       {  
    		case  1: com=1;break;
    		case  2: com=2;break;
     
    		default: com=0;break;  
    	}
     
     return com;
    }
     
    //**********************************************************************************************
     
    int comset(int com,unsigned int baud,int datenb,int stopb,int parity,int timeout,int tick,int interart,void (*intrfunc)(int))
    {  
       char comstr[100],dcbstr[100],pari;
       int ret;
       DWORD dwLastError;
     
    	 interart;intrfunc;
     
       switch(parity)
       {  
    		case PARITYEVEN: pari='e'; break;
    		case NOPARITY  : pari='n'; break;
    		case ODDPARITY : pari='o'; break;
    		default        : pari='n'; break;
       }
     
     
       ComSetError=0;
       ret=FALSE;
       sprintf(comstr,"COM%d",com);
     
       hCom[com-1]=CreateFile(comstr,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
     
       if(hCom[com-1]!=INVALID_HANDLE_VALUE) 
       {  
    	  comin_buf[com-1]=new BYTE[MAXCOMINBUF];
          //comout_buf[com-1]=new BYTE[MAXCOMINBUF];
          comin_z1[com-1]=comin_z2[com-1]=0;
          //comout_z1[com-1]=comout_z2[com-1]=0;
     
          comWriteOverlapped[com-1].hEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
          comReadOverlapped[com-1].hEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
     
     
          if(comin_buf[com-1]!=NULL/*&&comout_buf[com-1]!=NULL*/)
          {  
    		 SetzeComTimeOut(com,timeout,tick);
             sprintf(dcbstr,"%s:%d,%c,%d,%d",comstr,baud,pari,datenb,stopb);
             BuildCommDCB(dcbstr,&dcb[com-1]);
             dcb[com-1].fDtrControl=DTR_CONTROL_ENABLE;
             dcb[com-1].fRtsControl=RTS_CONTROL_ENABLE;
             if(SetCommState(hCom[com-1],&dcb[com-1])>=0)
             {  
    			dwComNum=com;
     
                switch(com)
                {  
    			   case 1 :hThread[0]=CreateThread(NULL,0,ReadComData1,&dwComNum,0,&dwThreadId[0]);
                           break;
                   case 2 :hThread[1]=CreateThread(NULL,0,ReadComData2,&dwComNum,0,&dwThreadId[1]);
                           break;
     
                }
     
     
                if(hThread[com-1]!=NULL)
                { 
    			   SetThreadPriority(hThread[com-1],THREAD_PRIORITY_HIGHEST/*THREAD_PRIORITY_NORMAL*/);
                   //hOutThread[com-1]=CreateThread(NULL,0,WriteComData,&dwComNum,0,&dwOutThreadId[com-1]);
                   //if(hOutThread[com-1]!=NULL)
                   //{  SetThreadPriority(hOutThread[com-1],THREAD_PRIORITY_NORMAL);
                   ret=TRUE;
                   //}
                   //else
                   //  ComSetError=CSERROR_OF_INVALID_WRITE_THREAD;
                }
                else
                  ComSetError=CSERROR_OF_INVALID_READING_THREAD;
             }
             else
               ComSetError=CSERROR_BAD_CONFIGURATION;
          }
          else
            ComSetError=CSERROR_NO_MEMORY;
       }
       else
       {  
    	  dwLastError=GetLastError();
     
          switch(dwLastError)
          {  
    	     case ERROR_FILE_NOT_FOUND: ComSetError=CSERROR_PORT_DOES_NOT_EXIST;break;
             case ERROR_ACCESS_DENIED : ComSetError=CSERROR_PORT_IS_OCCUPIED;     break;
             default                  : ComSetError=CSERROR_OF_UNKNOWN_QUANTITY_ERROR;  break;
          }
       }
     
       return ret;
    }
     
    //**********************************************************************************************
     
    int comreset(int com)
    {  
       int ret;
       ret=-1;
     
       if(hCom[com-1]!=(HANDLE)0xffffffff)
       {  
    	  if(hThread[com-1]!=NULL)
            TerminateThread(hThread[com-1],0);
          //if(hOutThread[com-1]!=NULL)
          //  TerminateThread(hOutThread[com-1],0);
     
          if(comin_buf[com-1]!=NULL)
            delete comin_buf[com-1];
          comin_buf[com-1]=NULL;
          //if(comout_buf[com-1]!=NULL)
          //  delete comout_buf[com-1];
          //comout_buf[com-1]=NULL;
     
     
          ret=CloseHandle(hCom[com-1]);
          hCom[com-1]=(HANDLE)0xffffffff;
     
          CloseHandle(comWriteOverlapped[com-1].hEvent);
          CloseHandle(comReadOverlapped[com-1].hEvent);
     
       }
     
       return ret;
    }
     
    //**********************************************************************************************
     
    int writedata(int com,BYTE c)
    { 
       //int ret;
       DWORD dwWritten,dwHandleSignaled,dwLastError;
       HANDLE WaitHandles[2];
     
       int success;
     
       ComWriteError=0;
       dwWritten=0;
       WaitHandles[0]=comWriteOverlapped[com-1].hEvent;
     
       success=FALSE;
       if(WriteFile(hCom[com-1],&c,1,&dwWritten,&comWriteOverlapped[com-1])==FALSE)
       {  
    	  // Das soll so
          dwLastError=GetLastError();
     
          switch(dwLastError)
          {
    		 case ERROR_INVALID_HANDLE: //port was closed from outside
                                        ComWriteError=CWERROR_PORT_CLOSED;
                                        break;
     
             case ERROR_IO_PENDING    : //That is the expected error
                                        dwHandleSignaled=WaitForMultipleObjects(1,WaitHandles,FALSE,INFINITE);
     
                                        switch(dwHandleSignaled)
                                        {  
    									   case WAIT_OBJECT_0: // Control rooms terminated, data must have been written
                                                               if(GetOverlappedResult(hCom[com-1],&comWriteOverlapped[com-1],&dwWritten,TRUE)==FALSE)
                                                               {  
    															  dwLastError=GetLastError();
     
    															  if(dwLastError==ERROR_INVALID_HANDLE)
                                                                  {  //port was closed from outside
                                                                     ComWriteError=CWERROR_PORT_CLOSED;
                                                                  }
                                                                  else
                                                                  {  //Unknown quantity error
                                                                     ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                                                  }
                                                               }
                                                               else if(dwWritten)
                                                                 success=TRUE;
                                                               break;
     
                                           case WAIT_FAILED  : // Control rooms failed
                                                               ComWriteError=CWERROR_CONTROL_ROOM_ERROR;
                                                               break;
     
                                           default           : //unknown quantity error
                                                               ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                                               break;
     
                                        }
                                        break;
     
             default                  : //Unknown quantity error
                                        ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                        break;
          }
       }
       else
         success=TRUE;
       return success;
     
       /*
       comout_buf[com-1][comout_z2[com-1]]=c;
    	 comout_z2[com-1]++;
       if(comout_z2[com-1]>=MAXCOMINBUF)
         comout_z2[com-1]=0;
       return TRUE;
       */
    }
     
    //**********************************************************************************************
     
    int writedatastring(int com,unsigned char string[],int anz)
    {  
       //int ret;
       DWORD dwWritten,dwHandleSignaled,dwLastError;
       HANDLE WaitHandles[2];
       int success;
     
       ComWriteError=0;
       dwWritten=0;
     
       WaitHandles[0]=comWriteOverlapped[com-1].hEvent;
     
       success=FALSE;
     
       if(WriteFile(hCom[com-1],string,anz,&dwWritten,&comWriteOverlapped[com-1])==FALSE)
       {  
    	  // Das soll so
          dwLastError=GetLastError();
     
          switch(dwLastError)
          {
    	     case ERROR_INVALID_HANDLE: //port was closed from outside
                                        ComWriteError=CWERROR_PORT_CLOSED;
                                        break;
     
             case ERROR_IO_PENDING    : //That is the expected error
                                        dwHandleSignaled=WaitForMultipleObjects(1,WaitHandles,FALSE,INFINITE);
     
                                        switch(dwHandleSignaled)
                                        {  
    									   case WAIT_OBJECT_0: // Control rooms terminated, data must have been written
                                                               if(GetOverlappedResult(hCom[com-1],&comWriteOverlapped[com-1],&dwWritten,TRUE)==FALSE)
                                                               {  
    															  dwLastError=GetLastError();
     
                                                                  if(dwLastError==ERROR_INVALID_HANDLE)
                                                                  { 
    																//port was closed from outside
                                                                     ComWriteError=CWERROR_PORT_CLOSED;
                                                                  }
                                                                  else
                                                                  {  //Unknown quantity error
                                                                     ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                                                  }
                                                               }
                                                               else if(dwWritten)
                                                                 success=TRUE;
                                                               break;
     
                                           case WAIT_FAILED  : // Control rooms failed
                                                               ComWriteError=CWERROR_CONTROL_ROOM_ERROR;
                                                               break;
     
                                           default           : //Unknown quantity error
                                                               ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                                               break;
     
                                        }
                                        break;
     
             default                  : //Unknown quantity error
                                        ComWriteError=CWERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                        break;
          }
       }
       else
         success=TRUE;
       return success;
     
       /*
       comout_buf[com-1][comout_z2[com-1]]=c;
    	 comout_z2[com-1]++;
       if(comout_z2[com-1]>=MAXCOMINBUF)
         comout_z2[com-1]=0;
       return TRUE;
       */
    }
     
    //**********************************************************************************************
     
    /*
    DWORD WINAPI WriteComData(LPVOID lpCom)
    {  int ret;
       DWORD dwWritten;
       BYTE c;
       DWORD com;
     
       for(;;)
       {  com=*(long*)lpCom;
          if(comout_z1[com-1]<comout_z2[com-1])
          {  c=comout_buf[com-1][comout_z1[com-1]];
    	      comout_z1[com-1]++;
    	      if(comout_z1[com-1]>=MAXCOMINBUF)
               comout_z1[com-1]=0;
             ret=WriteFile(hCom[com-1],&c,1,&dwWritten,&comOverlapped[com-1]);
          }
       }
       return dwWritten;
    }*/ 
     
    //**********************************************************************************************
     
     
    DWORD ReadComData(DWORD com)
    {  
       DWORD dwRead;
       BYTE c;
       HANDLE WaitHandles[2];
       DWORD dwLastError,dwHandleSignaled;
     
       WaitHandles[0]=comReadOverlapped[com-1].hEvent;
       for(;;)
       {  
    	   if(ReadFile(hCom[com-1],&c,1,&dwRead,&comReadOverlapped[com-1])==TRUE)
    	   {     
    		     comin_buf[com-1][comin_z2[com-1]]=c;
    			 comin_z2[com-1]++;
     
    			if(comin_z2[com-1]>=MAXCOMINBUF)
    			  comin_z2[com-1]=0;
     
    			 comin_error[com-1]=0;
     
    			 if(comin_z2[com-1]==comin_z1[com-1])
    			 { 
    			   comin_error[com-1]=1;
    			   ComReadError=CRERROR_OVERFLOW;
    			 }
          }
          else
          {  // That was expected in such a way
             dwLastError=GetLastError();
     
             if(dwLastError==ERROR_IO_PENDING)
             {  
    			// wait, until reading is terminated
                dwHandleSignaled=WaitForMultipleObjects(1,WaitHandles,FALSE,INFINITE);
     
                switch(dwHandleSignaled)
                {  
    			    case WAIT_OBJECT_0: // reading terminated, data take over
     
                                       if(GetOverlappedResult(hCom[com-1],&comReadOverlapped[com-1],&dwRead,FALSE)==TRUE)
    								   {   
    									   comin_buf[com-1][comin_z2[com-1]]=c;
                                           comin_z2[com-1]++;
     
                                           if(comin_z2[com-1]>=MAXCOMINBUF)
                                             comin_z2[com-1]=0;
     
    									   comin_error[com-1]=0;
     
                                           if(comin_z2[com-1]==comin_z1[com-1])
                                           {  
    										  comin_error[com-1]=1;
                                              ComReadError=CRERROR_OVERFLOW;
                                           }
                                       }
                                       else  
                                       {  
    									   dwLastError=GetLastError();
     
    									   if(dwLastError==ERROR_INVALID_HANDLE)
                                          {  
    										 //port was closed from outside ¶
                                             comin_error[com-1]=1;
                                             ComReadError=CRERROR_PORT_CLOSED;
                                          }
                                          else
                                          {  comin_error[com-1]=1;
                                             ComReadError=CRERROR_OF_UNKNOWN_QUANTITY_ERROR;
                                          }
                                       }
                                       break;
     
                   case WAIT_FAILED  : // Control rooms failed ¶
                                       comin_error[com-1]=1;
                                       ComWriteError=CRERROR_CONTROL_ROOM_ERROR;
                                       break;
     
                   default           : break;
                }
             }
             else
             { 
    			comin_error[com-1]=1;
                ComReadError=CRERROR_OF_UNKNOWN_QUANTITY_ERROR;
             }
          }
       }
     
       return dwRead;
    }
     
    //**********************************************************************************************
     
    DWORD WINAPI ReadComData1(LPVOID lpCom)
    {   
    	lpCom;
        return ReadComData(1);
     
    }
     
    //**********************************************************************************************
     
    DWORD WINAPI ReadComData2(LPVOID lpCom)
    {   
    	lpCom;
        return ReadComData(2);
     
    }
     
    //**********************************************************************************************
     
    //**********************************************************************************************
     
    void 	read_data_reset(int com)
    { 
    	comin_error[com-1]=0;
    	comin_z1[com-1]=comin_z2[com-1]=0;
    }
     
    //**********************************************************************************************
     
    int readdata(int com,BYTE *c)
    {  
       DWORD start;
     
       start=GetTickCount();
     
    	 while(GetTickCount()<start+COMTIMEOUT[com-1]&&comin_z2[com-1]==comin_z1[com-1]&&comin_error[com-1]==0) {;}//wait
     
    	 if(GetTickCount()<start+COMTIMEOUT[com-1] && comin_error[com-1]==0)
    		{ 
    		   *c=comin_buf[com-1][comin_z1[com-1]];
    		   comin_z1[com-1]++;
     
    		   if(comin_z1[com-1]>=MAXCOMINBUF)
    				comin_z1[com-1]=0;
     
    		   return TRUE;
    		}
     
       return FALSE;
    }
     
    //**********************************************************************************************
     
    void ReadDataInBuffer(int port)
    {
     
      port;
     
    }
     
    //**********************************************************************************************
     
    int DataAvailable(int com)
    {  
    	if(comin_z1[com-1]!=comin_z2[com-1]&&comin_error[com-1]==0)
        return TRUE;
        return FALSE;
    }
     
    //**********************************************************************************************
     
    void SetzeComTimeOut(int com,int timeout,int tick)
    {  
    	COMTIMEOUT[com-1]=timeout*55/tick;     //55=1/18.2 s
    }
     
    //**********************************************************************************************

    Mon dernier essai de VB est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub Comset1_Click()
     
    Dim retour_Comset As Long
     
    retour_Comset = Str(Comset(1, 9600, 8, 1, 0, 20))
    End Sub
     
    Private Sub Command1_Click()
    Dim buffer As String
    Data1 = "palette1"
    buffer = "00"
    Dim retour_Bytes_write As Long
     
     retour_Bytes_write = Bytes_write(True, 1, "2", buffer, "00", "16", Data1)
    'Text2.Text = Data1
     
    End Sub
     
    Private Sub Command2_Click()
     
    Dim i As Integer
    Dim n As Integer
    Dim retour_byte_read As Long
    Dim Text() As Byte
    Dim data(DATA_ARRAY) As Byte
    Dim lettre As Byte
    Dim buffer(3) As Byte
    Dim a(10) As Byte
     
    Text() = "palette1"
     
    retour_byte_read = Str(Byte_read(0, 1, "2", buffer, "00", "09", data))
     
    For i = 1 To 10
    a(i) = data(i)
    Next i
     n = StrComp(a, Text)
     If (n = 0) Then
     MsgBox ("ok")
     Else
     MsgBox a
     
     End If
     
     
    End Sub
     
    Private Sub Comreset1_Click()
    Dim retour_Comreset As Long
    retour_Comreset = ComReset(1)
    End Sub
    bien sur avec la partie de déclaration des fonctions.

  17. #17
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    re,
    je ctrouve souvent dans les exemples d'appel et utilisation des dll que chaque fonction se trouve dans une commande événementielle seule est ce que c'est obligatoire? et si j’appelle la fonction sans bouton de commande est ce que ça fonctionne ?
    L'essentiel est que l'appel soit dans une sub ou fonction évènementielle ou non.
    Que donne ton dernier essai de vb?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  18. #18
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Ajouter la référence de ta lib suppose que c'est une bibliothèque de type avec un fichier .def correctement defini. Ceci permet de dispenser le développeur des déclarations d'Api.

    Dans les déclarations d'appel, pour tes essais tu dois avoir la dll dans un répertoire visible pour le compilo, ou définir explicitement le chemin complet de la lib dans l'argument Lib Name de la déclaration.
    sans oublié dans l'argument Alias le nom décoré fourni par le compilateur.
    comment je peux ajouter la référence de la lib ?


    pour que la dll soit dans un répertoire visible pour le compilo la déclaration devient comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Private Declare Function ComReset Lib "C:\ Windows\system32\ RFID_VC_VB1.dll" ( _
                    ByVal iPort As Long) As Long

  19. #19
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Que donne ton dernier essai de vb?

    data de la fonction byte read que je veux l'afficher un résultat vide disons elle n'a rien reçu

  20. #20
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    comment je peux ajouter la référence de la lib ?
    Avec un code ou avec la boîte de dialogue Outils\Références.
    Cela peut avoir l'air compliqué ou pas du tout. J'essaierais de brosser un tableau à mon prochain retour.

    pour que la dll soit dans un répertoire visible pour le compilo la déclaration devient comme suit :
    Si la dll est déjà dans ce repertoire tu n'as pas besoin de spécifier le chemin, le nom court suffit.

    Edit: mon allusion au .def est un cafouillage. je voulais dire créer un fichier TLB
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2006, 18h26
  2. Réponses: 2
    Dernier message: 23/03/2006, 10h56
  3. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  4. [vb6] Modifier structure table Access sous VB6
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 25/03/2004, 17h45
  5. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo