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

C++ Discussion :

Utilisation simple d'un objet COM


Sujet :

C++

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    OK, c'est donc la seconde solution.

    Dans ce cas, en C++ sous Visual C++ 6, je vois deux façons principales:
    • En utilisant MFC: Le meilleur type de projet pour ça, c'est "MFC AppWizard (DLL)" puis "Regular DLL". Ensuite, ce que j'ai dit (ClassWizard, New Class, From a Type Library)
    • En utilisant le Compiler COM Support (je viens de testé, c'est supporté par VC++6). Ça s'utilise en faisant un projet C++ normal, et dans ton header, tu rajoutes cette ligne: #import "C:\\Program Files\\E!PC\\Extra.tlb" Ensuite, tu compiles, et tu verras un fichier extra.tlh et extra.tli générés par Visual. extra.tlh contiendra des définitions de classes de smart pointers utilisables facilement en C++.

    Je pense que la seconde solution est moins compliquée quand on ne connait pas MFC.
    Oui oui, je prefere aussi la deuxieme solution sans MFC, car c'est vrai ça fait tout, mais on comprend "quick"

    Je vais essayer la deuxieme tout de suite, hop hop, j'y vais ....

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    ça marche nickel aussi comme tu m'a dit.
    J'ai bien les deux fichiers comme tu m'as dit

    Y m'epate , Y m'epate

    Je sais pas si j'ai bien fait mais j'ai créé un fichier .cpp et j'ai mis le code dedans

    J'ai deux erreurs, mais ce doit etre normal, car c'est surement pas ce qu'il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Compiling...
    DllOle2.cpp
    Linking...
    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/DllOle2.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
     
    DllOle2.exe - 2 error(s), 0 warning(s)
    Voici les deux fichiers si ça t'interesse ....

    J'ai vu des fonction comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      virtual HRESULT __stdcall raw_Quit
    J'ai vu dans mon petit aprentissage des DLLs que stdcall etait les fonctions de point d'entrée d'une DLL, mais je ne suis pas sur que ce soit celle qu'il faille utiliser

  3. #23
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour la méthode avec MFC, je traduirais tes codes VB par ceci:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _System spSystem;
    spSystem.CreateDispatch(_T("EXTRA.System"));
    _Session spSessionTGC(spSystem.GetActiveSession()); //NOTE: C'est la syntaxe d'initialisation C++
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Screen spScreen(spSessionTGC.GetScreen());
    spScreen.SetRow(7);
    spScreen.SetCol(40);
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    spScreen.SendKeys( code perso );
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    OIA spOIA(spScreen.GetOia());
    do
    {
    }
    while(spOIA.GetXStatus() != 0);
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Area spArea(spScreen.Area(17, 37, 17, 68, COleVariant(DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(1)));
    CString strArea = spArea.GetValue();
    if(strArea == _T("Veuillez Confirmer votre DEMANDE")
    {
        ...
    }
    Pour la méthode avec les tli, il me semble que c'est carrément plus simple.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour ton erreur avec TLI, je pense que tu t'es gouré dans ton projet et que tu as fait Win32 application au lieu de Win32 dynamic-link library.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Si tu n'existait pas il faudrait t'inventer 8 -)

    Je vais essayer ton code, hop hop, j'y vais .....

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Snif j'ai trois erreur, et je ne vais pas t'etonner en te disant que je ne sais pas les corriger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    --------------------Configuration: AppelDll - Win32 Debug--------------------
    Compiling...
    AppelDll.cpp
    c:\appeldll\appeldll.cpp(3) : error C2146: syntax error : missing ';' before identifier 'spSystem'
    c:\appeldll\appeldll.cpp(3) : error C2501: '_System' : missing storage-class or type specifiers
    c:\appeldll\appeldll.cpp(3) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.
     
    AppelDll.exe - 3 error(s), 0 warning(s)
    Je sais j'abuse, ...si tu pouvais me donner la ligne pour fermer la session ....

  7. #27
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce code doit être mis dans une fonction de ta DLL MFC Regular, pas n'importe où et surtout pas en dehors de toute fonction...
    Et il est seulement prévu pour la version MFC. Si tu veux utiliser TLI, le code sera différent.

    PS: Tu n'as pas donné la ligne en VB pour fermer la session, donc je ne peux pas te donner la ligne en C++ + MFC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce code doit être mis dans une fonction de ta DLL MFC Regular, pas n'importe où et surtout pas en dehors de toute fonction...
    Et il est seulement prévu pour la version MFC. Si tu veux utiliser TLI, le code sera différent.
    Ah, j'ai encore rien compris, je croyais que l'on pouvais creer un autre projet et appeller la DLL qui serait dans le meme repertoire.
    Et pour un language exterieur ????
    Comment crois tu qu'il faille que j'appelle les fonctions ???

    Quelle burne, j'ai oublié aussi de le mettre dans une fonction, c'est vrai est ce qu'une fonction WinMain aurait marché ???
    C'est surement pas aussi simple

    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
    int WinMain()
    {
    	// Connection à l'objet EXTRA!
    	_System spSystem;
    	spSystem.CreateDispatch(_T("EXTRA.System"));
    	_Session spSessionTGC(spSystem.GetActiveSession()); //NOTE: C'est la syntaxe d'initialisation C++
     
    	// Lecture d'une ligne
    	Area spArea(spScreen.Area(18, 02, 18, 22, COleVariant(DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(1)));
    	CString strArea = spArea.GetValue();
    	if(strArea == _T("APPLICATION DESIREE :")
    	{
    	 MessageBox(0, "Application désirée lue", "Infos", MB_OK|MB_ICONINFORMATION);
    	}
     
     
    	// Ecriture 
    	Screen spScreen(spSessionTGC.GetScreen());
    	spScreen.SetRow(18);
    	spScreen.SetCol(26);
    	spScreen.SendKeys("Coucou");
    	spScreen.SendKeys("<Enter>");
     
    	// Boucle d'attente 
    	OIA spOIA(spScreen.GetOia());
     
    	do
    		{
    		}
    	while(spOIA.GetXStatus() != 0);
    }
    Citation Envoyé par Médinoc Voir le message
    PS: Tu n'as pas donné la ligne en VB pour fermer la session, donc je ne peux pas te donner la ligne en C++ + MFC...
    Y'en a qu'un qui suit ......
    Je ne sais pas pourquoi .....mais je sens que la route qui va me mener au pays du C va etre longue.....
    Je me prévoie dés ce soir, quelques séances de flagelation.....
    Si si, j'insiste, je le mérite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Session.Close
    Set System = Nothing
    Set Session = Nothing

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Ce qui est bizzare, c'est que quand je scanne cette DLL avec un programme fait dans un autre language et qui me donne normalement toutes les fonctions d'une DLL, il n'y a rien qui parle d'EXTRA, je n'est comme retour que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DllCanUnloadNow
    DllGetClassObject
    DllRegisterServer
    Alors que si je scanne avec le meme language la DLL "c:\winnt\system32\USER32.DLL" (par exemple) j'obtiens bien toutes ses fonctions

    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
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    ActivateKeyboardLayout
    AdjustWindowRect
    AdjustWindowRectEx
    AlignRects
    AllowSetForegroundWindow
    AnimateWindow
    AnyPopup
    AppendMenuA
    AppendMenuW
    ArrangeIconicWindows
    AttachThreadInput
    BeginDeferWindowPos
    BeginPaint
    BlockInput
    BringWindowToTop
    BroadcastSystemMessage
    BroadcastSystemMessageA
    BroadcastSystemMessageW
    CallMsgFilter
    CallMsgFilterA
    CallMsgFilterW
    CallNextHookEx
    CallWindowProcA
    CallWindowProcW
    CascadeChildWindows
    CascadeWindows
    ChangeClipboardChain
    ChangeDisplaySettingsA
    ChangeDisplaySettingsExA
    ChangeDisplaySettingsExW
    ChangeDisplaySettingsW
    ChangeMenuA
    ChangeMenuW
    CharLowerA
    CharLowerBuffA
    CharLowerBuffW
    CharLowerW
    CharNextA
    CharNextExA
    CharNextW
    CharPrevA
    CharPrevExA
    CharPrevW
    CharToOemA
    CharToOemBuffA
    CharToOemBuffW
    CharToOemW
    CharUpperA
    CharUpperBuffA
    CharUpperBuffW
    CharUpperW
    CheckDlgButton
    CheckMenuItem
    CheckMenuRadioItem
    CheckRadioButton
    ChildWindowFromPoint
    ChildWindowFromPointEx
    CliImmSetHotKey
    ClientThreadSetup
    ClientToScreen
    ClipCursor
    CloseClipboard
    CloseDesktop
    CloseWindow
    CloseWindowStation
    CopyAcceleratorTableA
    CopyAcceleratorTableW
    CopyIcon
    CopyImage
    CopyRect
    CountClipboardFormats
    CreateAcceleratorTableA
    CreateAcceleratorTableW
    CreateCaret
    CreateCursor
    CreateDesktopA
    CreateDesktopW
    CreateDialogIndirectParamA
    CreateDialogIndirectParamAorW
    CreateDialogIndirectParamW
    CreateDialogParamA
    CreateDialogParamW
    CreateIcon
    CreateIconFromResource
    CreateIconFromResourceEx
    CreateIconIndirect
    CreateMDIWindowA
    CreateMDIWindowW
    CreateMenu
    CreatePopupMenu
    CreateWindowExA
    CreateWindowExW
    CreateWindowStationA
    CreateWindowStationW
    CtxInitUser32
    DdeAbandonTransaction
    DdeAccessData
    DdeAddData
    DdeClientTransaction
    DdeCmpStringHandles
    DdeConnect
    DdeConnectList
    DdeCreateDataHandle
    DdeCreateStringHandleA
    DdeCreateStringHandleW
    DdeDisconnect
    DdeDisconnectList
    DdeEnableCallback
    DdeFreeDataHandle
    DdeFreeStringHandle
    DdeGetData
    DdeGetLastError
    DdeGetQualityOfService
    DdeImpersonateClient
    DdeInitializeA
    DdeInitializeW
    DdeKeepStringHandle
    DdeNameService
    DdePostAdvise
    DdeQueryConvInfo
    DdeQueryNextServer
    DdeQueryStringA
    DdeQueryStringW
    DdeReconnect
    DdeSetQualityOfService
    DdeSetUserHandle
    DdeUnaccessData
    DdeUninitialize
    DefDlgProcA
    DefDlgProcW
    DefFrameProcA
    DefFrameProcW
    DefMDIChildProcA
    DefMDIChildProcW
    DefWindowProcA
    DefWindowProcW
    DeferWindowPos
    DeleteMenu
    DeregisterShellHookWindow
    DestroyAcceleratorTable
    DestroyCaret
    DestroyCursor
    DestroyIcon
    DestroyMenu
    DestroyWindow
    DeviceEventWorker
    DialogBoxIndirectParamA
    DialogBoxIndirectParamAorW
    DialogBoxIndirectParamW
    DialogBoxParamA
    DialogBoxParamW
    DispatchMessageA
    DispatchMessageW
    DlgDirListA
    DlgDirListComboBoxA
    DlgDirListComboBoxW
    DlgDirListW
    DlgDirSelectComboBoxExA
    DlgDirSelectComboBoxExW
    DlgDirSelectExA
    DlgDirSelectExW
    DragDetect
    DragObject
    DrawAnimatedRects
    DrawCaption
    DrawCaptionTempA
    DrawCaptionTempW
    DrawEdge
    DrawFocusRect
    DrawFrame
    DrawFrameControl
    DrawIcon
    DrawIconEx
    DrawMenuBar
    DrawMenuBarTemp
    DrawStateA
    DrawStateW
    DrawTextA
    DrawTextExA
    DrawTextExW
    DrawTextW
    EditWndProc
    EmptyClipboard
    EnableMenuItem
    EnableScrollBar
    EnableWindow
    EndDeferWindowPos
    EndDialog
    EndMenu
    EndPaint
    EndTask
    EnumChildWindows
    EnumClipboardFormats
    EnumDesktopWindows
    EnumDesktopsA
    EnumDesktopsW
    EnumDisplayDevicesA
    EnumDisplayDevicesW
    EnumDisplayMonitors
    EnumDisplaySettingsA
    EnumDisplaySettingsExA
    EnumDisplaySettingsExW
    EnumDisplaySettingsW
    EnumPropsA
    EnumPropsExA
    EnumPropsExW
    EnumPropsW
    EnumThreadWindows
    EnumWindowStationsA
    EnumWindowStationsW
    EnumWindows
    EqualRect
    ExcludeUpdateRgn
    ExitWindowsEx
    FillRect
    FindWindowA
    FindWindowExA
    FindWindowExW
    FindWindowW
    FlashWindow
    FlashWindowEx
    FrameRect
    FreeDDElParam
    GetActiveWindow
    GetAltTabInfo
    GetAltTabInfoA
    GetAltTabInfoW
    GetAncestor
    GetAppCompatFlags
    GetAppCompatFlags2
    GetAsyncKeyState
    GetCapture
    GetCaretBlinkTime
    GetCaretPos
    GetClassInfoA
    GetClassInfoExA
    GetClassInfoExW
    GetClassInfoW
    GetClassLongA
    GetClassLongW
    GetClassNameA
    GetClassNameW
    GetClassWord
    GetClientRect
    GetClipCursor
    GetClipboardData
    GetClipboardFormatNameA
    GetClipboardFormatNameW
    GetClipboardOwner
    GetClipboardSequenceNumber
    GetClipboardViewer
    GetComboBoxInfo
    GetCursor
    GetCursorFrameInfo
    GetCursorInfo
    GetCursorPos
    GetDC
    GetDCEx
    GetDesktopWindow
    GetDialogBaseUnits
    GetDlgCtrlID
    GetDlgItem
    GetDlgItemInt
    GetDlgItemTextA
    GetDlgItemTextW
    GetDoubleClickTime
    GetFocus
    GetForegroundWindow
    GetGUIThreadInfo
    GetGuiResources
    GetIconInfo
    GetInputDesktop
    GetInputState
    GetInternalWindowPos
    GetKBCodePage
    GetKeyNameTextA
    GetKeyNameTextW
    GetKeyState
    GetKeyboardLayout
    GetKeyboardLayoutList
    GetKeyboardLayoutNameA
    GetKeyboardLayoutNameW
    GetKeyboardState
    GetKeyboardType
    GetLastActivePopup
    GetLastInputInfo
    GetListBoxInfo
    GetMenu
    GetMenuBarInfo
    GetMenuCheckMarkDimensions
    GetMenuContextHelpId
    GetMenuDefaultItem
    GetMenuInfo
    GetMenuItemCount
    GetMenuItemID
    GetMenuItemInfoA
    GetMenuItemInfoW
    GetMenuItemRect
    GetMenuState
    GetMenuStringA
    GetMenuStringW
    GetMessageA
    GetMessageExtraInfo
    GetMessagePos
    GetMessageTime
    GetMessageW
    GetMonitorInfoA
    GetMonitorInfoW
    GetMouseMovePointsEx
    GetNextDlgGroupItem
    GetNextDlgTabItem
    GetOpenClipboardWindow
    GetParent
    GetPriorityClipboardFormat
    GetProcessDefaultLayout
    GetProcessWindowStation
    GetProgmanWindow
    GetPropA
    GetPropW
    GetQueueStatus
    GetScrollBarInfo
    GetScrollInfo
    GetScrollPos
    GetScrollRange
    GetShellWindow
    GetSubMenu
    GetSysColor
    GetSysColorBrush
    GetSystemMenu
    GetSystemMetrics
    GetTabbedTextExtentA
    GetTabbedTextExtentW
    GetTaskmanWindow
    GetThreadDesktop
    GetTitleBarInfo
    GetTopWindow
    GetUpdateRect
    GetUpdateRgn
    GetUserObjectInformationA
    GetUserObjectInformationW
    GetUserObjectSecurity
    GetWinStationInfo
    GetWindow
    GetWindowContextHelpId
    GetWindowDC
    GetWindowInfo
    GetWindowLongA
    GetWindowLongW
    GetWindowModuleFileName
    GetWindowModuleFileNameA
    GetWindowModuleFileNameW
    GetWindowPlacement
    GetWindowRect
    GetWindowRgn
    GetWindowTextA
    GetWindowTextLengthA
    GetWindowTextLengthW
    GetWindowTextW
    GetWindowThreadProcessId
    GetWindowWord
    GrayStringA
    GrayStringW
    HideCaret
    HiliteMenuItem
    IMPGetIMEA
    IMPGetIMEW
    IMPQueryIMEA
    IMPQueryIMEW
    IMPSetIMEA
    IMPSetIMEW
    ImpersonateDdeClientWindow
    InSendMessage
    InSendMessageEx
    InflateRect
    InitializeLpkHooks
    InitializeWin32EntryTable
    InsertMenuA
    InsertMenuItemA
    InsertMenuItemW
    InsertMenuW
    InternalGetWindowText
    IntersectRect
    InvalidateRect
    InvalidateRgn
    InvertRect
    IsCharAlphaA
    IsCharAlphaNumericA
    IsCharAlphaNumericW
    IsCharAlphaW
    IsCharLowerA
    IsCharLowerW
    IsCharUpperA
    IsCharUpperW
    IsChild
    IsClipboardFormatAvailable
    IsDialogMessage
    IsDialogMessageA
    IsDialogMessageW
    IsDlgButtonChecked
    IsHungAppWindow
    IsIconic
    IsMenu
    IsRectEmpty
    IsWindow
    IsWindowEnabled
    IsWindowUnicode
    IsWindowVisible
    IsZoomed
    KillSystemTimer
    KillTimer
    LoadAcceleratorsA
    LoadAcceleratorsW
    LoadBitmapA
    LoadBitmapW
    LoadCursorA
    LoadCursorFromFileA
    LoadCursorFromFileW
    LoadCursorW
    LoadIconA
    LoadIconW
    LoadImageA
    LoadImageW
    LoadKeyboardLayoutA
    LoadKeyboardLayoutEx
    LoadKeyboardLayoutW
    LoadLocalFonts
    LoadMenuA
    LoadMenuIndirectA
    LoadMenuIndirectW
    LoadMenuW
    LoadRemoteFonts
    LoadStringA
    LoadStringW
    LockSetForegroundWindow
    LockWindowStation
    LockWindowUpdate
    LockWorkStation
    LookupIconIdFromDirectory
    LookupIconIdFromDirectoryEx
    MBToWCSEx
    MB_GetString
    MapDialogRect
    MapVirtualKeyA
    MapVirtualKeyExA
    MapVirtualKeyExW
    MapVirtualKeyW
    MapWindowPoints
    MenuItemFromPoint
    MenuWindowProcA
    MenuWindowProcW
    MessageBeep
    MessageBoxA
    MessageBoxExA
    MessageBoxExW
    MessageBoxIndirectA
    MessageBoxIndirectW
    MessageBoxW
    ModifyMenuA
    ModifyMenuW
    MonitorFromPoint
    MonitorFromRect
    MonitorFromWindow
    MoveWindow
    MsgWaitForMultipleObjects
    MsgWaitForMultipleObjectsEx
    NotifyWinEvent
    OemKeyScan
    OemToCharA
    OemToCharBuffA
    OemToCharBuffW
    OemToCharW
    OffsetRect
    OpenClipboard
    OpenDesktopA
    OpenDesktopW
    OpenIcon
    OpenInputDesktop
    OpenWindowStationA
    OpenWindowStationW
    PackDDElParam
    PaintDesktop
    PeekMessageA
    PeekMessageW
    PostMessageA
    PostMessageW
    PostQuitMessage
    PostThreadMessageA
    PostThreadMessageW
    PrivateExtractIconExA
    PrivateExtractIconExW
    PrivateExtractIconsA
    PrivateExtractIconsW
    PrivateSetDbgTag
    PrivateSetRipFlags
    PtInRect
    QuerySendMessage
    QueryUserCounters
    RealChildWindowFromPoint
    RealGetWindowClass
    RealGetWindowClassA
    RealGetWindowClassW
    RedrawWindow
    RegisterClassA
    RegisterClassExA
    RegisterClassExW
    RegisterClassW
    RegisterClipboardFormatA
    RegisterClipboardFormatW
    RegisterDeviceNotificationA
    RegisterDeviceNotificationW
    RegisterHotKey
    RegisterLogonProcess
    RegisterServicesProcess
    RegisterShellHookWindow
    RegisterSystemThread
    RegisterTasklist
    RegisterWindowMessageA
    RegisterWindowMessageW
    ReleaseCapture
    ReleaseDC
    RemoveMenu
    RemovePropA
    RemovePropW
    ReplyMessage
    ResolveDesktopForWOW
    ReuseDDElParam
    ScreenToClient
    ScrollChildren
    ScrollDC
    ScrollWindow
    ScrollWindowEx
    SendDlgItemMessageA
    SendDlgItemMessageW
    SendIMEMessageExA
    SendIMEMessageExW
    SendInput
    SendMessageA
    SendMessageCallbackA
    SendMessageCallbackW
    SendMessageTimeoutA
    SendMessageTimeoutW
    SendMessageW
    SendNotifyMessageA
    SendNotifyMessageW
    SetActiveWindow
    SetCapture
    SetCaretBlinkTime
    SetCaretPos
    SetClassLongA
    SetClassLongW
    SetClassWord
    SetClipboardData
    SetClipboardViewer
    SetConsoleReserveKeys
    SetCursor
    SetCursorContents
    SetCursorPos
    SetDebugErrorLevel
    SetDeskWallpaper
    SetDlgItemInt
    SetDlgItemTextA
    SetDlgItemTextW
    SetDoubleClickTime
    SetFocus
    SetForegroundWindow
    SetInternalWindowPos
    SetKeyboardState
    SetLastErrorEx
    SetLayeredWindowAttributes
    SetLogonNotifyWindow
    SetMenu
    SetMenuContextHelpId
    SetMenuDefaultItem
    SetMenuInfo
    SetMenuItemBitmaps
    SetMenuItemInfoA
    SetMenuItemInfoW
    SetMessageExtraInfo
    SetMessageQueue
    SetParent
    SetProcessDefaultLayout
    SetProcessWindowStation
    SetProgmanWindow
    SetPropA
    SetPropW
    SetRect
    SetRectEmpty
    SetScrollInfo
    SetScrollPos
    SetScrollRange
    SetShellWindow
    SetShellWindowEx
    SetSysColors
    SetSysColorsTemp
    SetSystemCursor
    SetSystemMenu
    SetSystemTimer
    SetTaskmanWindow
    SetThreadDesktop
    SetTimer
    SetUserObjectInformationA
    SetUserObjectInformationW
    SetUserObjectSecurity
    SetWinEventHook
    SetWindowContextHelpId
    SetWindowLongA
    SetWindowLongW
    SetWindowPlacement
    SetWindowPos
    SetWindowRgn
    SetWindowStationUser
    SetWindowTextA
    SetWindowTextW
    SetWindowWord
    SetWindowsHookA
    SetWindowsHookExA
    SetWindowsHookExW
    SetWindowsHookW
    ShowCaret
    ShowCursor
    ShowOwnedPopups
    ShowScrollBar
    ShowStartGlass
    ShowWindow
    ShowWindowAsync
    SoftModalMessageBox
    SubtractRect
    SwapMouseButton
    SwitchDesktop
    SwitchToThisWindow
    SystemParametersInfoA
    SystemParametersInfoW
    TabbedTextOutA
    TabbedTextOutW
    TileChildWindows
    TileWindows
    ToAscii
    ToAsciiEx
    ToUnicode
    ToUnicodeEx
    TrackMouseEvent
    TrackPopupMenu
    TrackPopupMenuEx
    TranslateAccelerator
    TranslateAcceleratorA
    TranslateAcceleratorW
    TranslateMDISysAccel
    TranslateMessage
    TranslateMessageEx
    UnhookWinEvent
    UnhookWindowsHook
    UnhookWindowsHookEx
    UnionRect
    UnloadKeyboardLayout
    UnlockWindowStation
    UnpackDDElParam
    UnregisterClassA
    UnregisterClassW
    UnregisterDeviceNotification
    UnregisterHotKey
    UpdateLayeredWindow
    UpdatePerUserSystemParameters
    UpdateWindow
    User32InitializeImmEntryTable
    UserClientDllInitialize
    UserHandleGrantAccess
    UserLpkPSMTextOut
    UserLpkTabbedTextOut
    UserRealizePalette
    UserRegisterWowHandlers
    VRipOutput
    VTagOutput
    ValidateRect
    ValidateRgn
    VkKeyScanA
    VkKeyScanExA
    VkKeyScanExW
    VkKeyScanW
    WCSToMBEx
    WINNLSEnableIME
    WINNLSGetEnableStatus
    WINNLSGetIMEHotkey
    WaitForInputIdle
    WaitMessage
    Win32PoolAllocationStats
    WinHelpA
    WinHelpW
    WindowFromDC
    WindowFromPoint
    keybd_event
    mouse_event
    wsprintfA
    wsprintfW
    wvsprintfA
    wvsprintfW

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Une DLL COM/OLE n'a besoin d'exposer que quatre fonctions, et une seule d'entre elles est nécessaire à l'instanciation d'objets COM. Les trois autres ont différentes utilités.

    Si j'ai bien compris, la DLL que tu cherches à créer (basée sur MFC ou sur TLI) doit garder en mémoire un _System (ou le type équivalent en TLI) et exposer des fonctions qui agissent sur ces objets.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Je suis allé voir vers 21h30 si j'avais une réponse de toi, mais je me suis dis, il doit en avoir marre de ce boulet, ça suffit pendant toute la journée
    Et je me rend compte quie comme tout bon programmeur, tu es un couche tard
    Je suis content de te retrouver ce matin MEDINOC,
    Tu m'a manqué, je suis sur que c'est pas réciproque

    Si j'ai bien compris, la DLL que tu cherches à créer (basée sur MFC ou sur TLI) doit garder en mémoire un _System (ou le type équivalent en TLI) et exposer des fonctions qui agissent sur ces objets.
    Oui exactement, je créé beaucoup de petits utilitaires qui "télécommande" cet emulateur.
    Tous ces utilitaires ont donc un point commun, les 4/5 commandes nécéssaires à la gestion de cet émulateur.
    Au debut, j'avais fait un module que je copiais/collais ou inserais dans VB.
    Mais au bout de 10 utilitaires et plus, j'ai vite compris les limites de cette methode, aucun de mes programmes n'avait le meme module pilote

    Alors je me suis dit, qu'a cela ne tienne, je vais creer une DLL pour que j'envois toujours les memes ordres, en plus j'ai vu que c'est comme ça que les VRAIS programmeurs procedaient.(Windows, Office etc ..)
    Et comme je suis un microbe qui essais de se tenir sur la pointe des pieds pour jouer dans la cour des grands .....

    Donc fort de cette constatation, je part au splendide pays de la DLL

    J'ai vite perdu le sourire, quand j'ai appris que VB ne faisait pas des "vrais" DLL, qu'il fallait modifier la BDR, et moi, ni j'aime, ni je n'ai l'autorisation de modifier la BDR à mon gré (Je ne suis pas administrateur des machines) donc c'est prendre le risque un jour d'avoir un refus de fonctionnement de mes logiciels

    Alors, je me suis tourné vers un autre language sublime, simple, créé par un français (cocorico) qui est extremement rapide, car compilé en ASM immediatement, qui a la syntaxe du basic, la structure du C, d'ailleurs beaucoups de ses programmeurs sont des programmeurs C et ASM qui l'utilisent lorsqu'ils ont besoin de creer une petite appli sans avoir a sortir l'artillerie lourde et puissante du C
    Il est portable pas besoin de runtime, il est completement autonome, il créé des tout petits executables, il est extensible a volonté chacun peux inserer des lib et etendre sa puissance à l'infini, il a un update a vie gratuit, et est MAJ assez souvent, une communauté et un forum international puisque comme je l'ai dit beaucoup de programmeurs C, il ne vaut que 500 Frs au depart et donc toute la vie, il sait mixer dans le meme code du basic et de l'ASM, et sait creer des DLL aussi facilement que l'on créé un exe et encore plein d'autres avantages...............
    Je l'utilise depuis 3/4 ans avec passion.

    Autant dire que le jour ou je l'ai decouvert, j'ai tout fait pour ne plus utiliser VB, lourd, non performant, non portable, pas de DLL, necessité du runtime 4 CD d'installe contre 3/4 disquettes pour la merveille dont je t'ai parlé.

    Bref je croyais mon bonheur parfait, j'ai donc enfourché mon super language pour créer ma DLL tant désiré et la je suis tombé sur un OS, j'ai nommé l'AUTOMATION proprietaire de bilou
    Il nous enerve celui la a jamais vouloir faire comme les autres

    Et oui FRED (l'inventeur de la petite merveille) n'a pu inclure l'OLE car je pense qu'il n'a pas le droit
    Alors des petits malins ont créé une lib COM, basé sur un code en C http://disphelper.sourceforge.net/, (tu vois quand je te dis que ce sont des programmeurs C ) car tu te rappelle on peut l'etendre a volonté.
    D'ailleurs c'est eux qui m'ont donné le lien de ce genial forum, et m'ont souhaité bonne chance (Je commence à comprendre pourquoi )

    Et la, ça a marché d'enfer, mais je n'aime pas trop utiliser les lib ou Dll des autres quand on a pas les sources, car on ne sait pas ce qu'il y a dedans, et quand elle n'est pas tenue a jour, ou si il y a un bug, bah ton appli elle a plus aucune valeur , un peu comme MFC en plus grand.
    J'ai lu que beaucoup de programmeurs C n'etaient pas trop partisants de programmer en MFC car ils "perdaient la main" sur le code (si on peux dire).
    Que le Win32 etait beaucoup plus dur, mais bien plus sur et autonome (Je cite ce que j'ai lu)

    Donc pour en revenir a mes "beeeeehhhh" , je sais je suis bavard
    J'ai donc fait marcher ma DLL avec cette lib "magique", mais j'ai eu un bug dans les handles et j'ai beau eu contacté l'auteur de la lib, je n'ai eu aucune reponse

    Donc me revoila tout nu, toujours pas de DLL depuis 2 mois que je cherche

    C'est alors que j'ai pensé au grand, magistral, incontestable C (C comme createur ) celui qui est le pere de quasi toutes les plus grosses applications qui tournent dans ce bas monde

    Depuis 15 ans je reve de taper quelques lignes en C, j'ai acheté une vingtaine de livres, mais aussi le language C en disquette 5p 1/4, le language borland C++, le visual studio 6 car j'avais deja VB6, mais dans Visual studio, y'a le grand C, je me disais, et tout ça est resté plein de poussiere car à ma grande honte, j'ai pas assez de neurones pour faire tourner un language aussi compliqué et magistral que le C

    Car celui qui parle le C, parle à l'oreille des microprocesseurs

    Alors cete fois, je me suis dit, c'est l'occasion ou jamais, de reunir ton reve de faire un peu de language C, de creer des vrais DLL, et en plus de pouvoir donner a d'autres languages la fonction magique (il faut le dire) de l'AUTOMATION.

    J'ai pris mon courage a deux mains, j'ai ouvert l'IDE Vc++, j'ai lu les livres meme au toilettes, et j'ai commencé à pleuré, car apres avoir trouvé un code qui créé les DLL, j'ai cru bettement que bilou avait incorporé le COM à la meme maniere que VB et je m'aperçois que decidement avec lui, y'a toujours un truc qui coince

    Voila, toute la vérité, tout mon dur parcours, je te doit bien ça à toi qui depuis hier a la patience et la gentillesse d'aider un dechet de la programmation comme moi
    Quand tu pense que je programmme depuis 26 ans car ça a toujours été une de mes passions
    Depuis le ZX81, le TO7 de thomson que j'avais acheté des qu'il etait sorti à 6000 Frs et son basic resident, jusqu'a l'ATARI falcon en passant pas des dizaines de machines
    Plus je programme, plus je me rend compte que je suis nul
    Mais bon, je m'accroche, car meme si la prog ne m'aime pas, moi je l'aime.
    C'est comme dans tous les bons couples

    Pour en finir et en revenir à ta question (excuse moi) mon reve serait une DLL en TLI, car c'est apparement plus simple, et aussi plus autonome puisque ça ne passe pas par MFC, avec les fonction OLE dedans :

    1/ Connection/Deconnection
    2/ Positionner le curseur de l'emulateur à tel coordonnées x/y
    3/ Ecrire et envoyer des caracteres speciaux
    4/ Lire telle zone de texte

    Comme ça dans mes applis VB et autres, je declare la DLL, je créé les fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare ConnectExtra lib "DllOlee" (byval as Handle) as long
    Private Declare ....................................
    Private Declare ...............................
    Private Declare .............................
    Private Declare .................................
     
    1/ ConnectExtra(Handle) et DeconnectExtra(Handle)
    2/ PositionExtra(Handle, Col, Lig)
    3/ EcrisEXTRA(Handle, Col, Lig, Texte$)
    4/ Texte = LisExtra(Handle, Col, Lig, NbreCaracteres)
    Je met le handle, car cerise sur le ponpon, j'aurais aimé gerer plusieurs EXTRA ensembles (c'est justement la que la lib a merdé)

    Voila mon reve depuis des mois

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Bon j'me suis remis au boulot

    Pour voir si j'avais bien compris, j'ai repris du debut la methode TLI qui m'a bien plu.

    1/ J'ai créé un nouveau projet "Win32 Dynamic Link library" vide
    2/ J'ai cliqué sur "New text File" en haut à gauche
    3/ J'ai copié ta phrase magique "#import "C:\\Program Files\\E!PC\\Extra.tlb" dedans
    4/ J'ai fermé le texte et quand il m'a demandé un nom, je lui ai dit "DllOle_TLI.h"
    5/ J'ai chargé ce fichier "DllOle_TLI.h" dans le repertoire "Header Files"
    6/ J'ai fait un "Rebuild all" (Aucune erreur)
    7/ Effectivement j'ai retrouvé, deux fichiers : Extra.tli et Extra.tlh
    8/ J'ai copié le texte de Extra.tlh dans le presse papier, cliqué sur "New text File" colé le presse papier et enregistré sous "DllOle_TLI.cpp"
    9/ J'ai chargé ce fichier "DllOle_TLI.cpp" dans le repertoire "Source Files"
    10/ J'ai fait un "Rebuild all" (Aucune erreur)
    11/ J'ai obtenu une DLL toute neuve ainsi que noir de fichiers intermediaires dans le repertoire "Debug"

    Et c'est la que les ateniens s'atteignirent
    J'ai mis un coup de mon scanneur de DLL et j'ai une belle erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    L'instruction à "0x78001cf7" emploie l'adresse mémoire "0x10905a4d".
    La mémoire ne peut pas etre "read"


    J'suis désespéré

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Salut,
    1. Automation n'est pas "rien vouloir faire comme les autres", car les autres n'ont rien fait du tout (à part CORBA). Automation donne un standard binaire utilisable depuis de nombreux langages, aussi bien dans le même processus qu'en inter-processus ou même en réseau, qu'est-ce que tu veux de plus?
    2. Le problème d'automation avec le C, c'est que normalement on obtient deux fichiers (le .h et le .tlb) et la plupart des gens (y compris ceux de MS) ne distribuent que le .tlb. Sous Visual, ce n'est pas un problème en C++ grâce à TLI, mais ça reste un problème en C et sous MinGW. Donc, ce n'est pas la technologie qui est mauvaise, mais la façon de s'en servir.
    3. Il y a deux façons d'appeler des interfaces COM: La façon "compilée à l'avance" (early binding) et le late binding (qui met en scène Dispatch, IDispatch, etc.) Une interface COM est dite "duale" si on peut l'appeler des deux façons.
      • TLI utilise l'early binding, le plus performant.
      • En C sans fichier d'en-tête, on peut toujours se rabattre sur le late-binding. Avec un fichier d'en-tête, on utilise l'early binding.
      • MFC et DispHelper utilisent le late binding.
      • VB peut utiliser early-binding et late-binding, selon les cas.
      • VBA et tous les langages de script utilisent le late binding.
      • Si le "super langage" (dont tu n'as pas donné le nom) est compilé, son créateur pourrait tout-à-fait faire quelque chose pour utiliser COM, y compris en early binding, du moins en client. Et s'il est interprété, il pourrait utiliser COM en late binding.
    4. Pour la suite, je ne peux pas vraiment t'aider sans le reste du code de ta DLL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qu'est-ce que tu veux de plus?
    Bah, t'avoueras que c'est quand meme dommage que ce soit si compliqué à utiliser en VC++
    C'est quand meme tout à lui, il aurait pu inclure une fonction CreateObject comme dans VB.
    J'ai cru comprendre d'ailleurs qu'il l'avait fait dans le VC#
    C'est dommage que c'est 10 ans ou plus apres son invention, qu'il est pensé à le mettre natif

    Il y a deux façons d'appeler des interfaces COM: La façon "compilée à l'avance" (early binding) et le late binding (qui met en scène Dispatch, IDispatch, etc.) Une interface COM est dite "duale" si on peut l'appeler des deux façons.
    TLI utilise l'early binding, le plus performant.
    D'accord, c'est super bien expliqué, meme moi j'ai compris, c'est un signe que tu es pedagogue

    TLI utilise l'early binding, le plus performant.
    En C sans fichier d'en-tête, on peut toujours se rabattre sur le late-binding. Avec un fichier d(en-tête, on utilise l'early binding.
    Pour l'instant c'est encore abstrait pour moi, mais je ne pense pas que j'ai besoin de performances avec mes 4 fonctions.

    MFC et DispHelper utilisent le late binding.
    VB et tous les langages de script utilisent le late binding aussi.
    Alors la, ça deviens encore plus interessant
    Parce que MFC, je connais de nom et vois a peut pres à quoi ça sert
    DispHelper, alors la j'suis épaté parce que je vois que tu connais, je pensais que c'etait un code inventé par un inconnu et peu utilisé, mais apparement c'est quelque chose d'assez phénoménal
    Et la......on parle de VB et des script, alors ça me parle encore plus.

    Donc apparement, ce serait dans le "late-binding" que serait ma solution, puisque je veux etre compatible VB

    Si le "super langage" (dont tu n'as pas donné le nom) est compilé, son créateur pourrait tout-à-fait faire quelque chose pour utiliser COM, y compris en early binding, du moins en client. Et s'il est interprété, il pourrait utiliser COM en late binding.
    J'ai utilisé le terme de "super language", mais ça n'engage que moi et tous ceux qui l'utilisent.
    Et comme je sais que ces utilisateurs sont des C-MAN, ça force le respect non ???
    Je pense que des programmeurs de ta trempe lorsqu'ils se penchent sur un language et quand ils arrivent du C, ont peut leur faire confiance quand à la qualité d'un language.
    Il y a surement d'autres languages aussi valable que celui-ci, mais je suis tombé sur lui, en cherchant un language performant, simple, et autonome.
    Et puis je ne veux pas entrer dans la polémique des languages, quel est le meilleur, le plus fort....mon papa est plus fort que le tiens ....
    Chacun voit le midi à sa porte, l'important, c'est qu'un language convienne à celui qui l'utilise

    Je n'ai pas donné le nom, par respect pour vous, on ne viens pas la "gueule enfariné" fanfaronner et parler d'un autre language sur un forum aussi respectable que celui-ci surtout dans une rubrique concernant le C, language innégalé par sa puissance.
    Je ne savais pas si j'avais le droit, donc dans l'ignorance s'abstenir
    Maintenant si, le nom t'interesse et si j'ai le droit, evidemment que je donnerais le nom pour que si tu le desire tu puisse te faire une idée par toi meme

    Je croyais que le COM etait copyright
    Ce que je sais, c'est qu'il lui manque cette fonction, car certaines personnes de son forum, lui ont demandé si il pouvait pas inclure DispHelper
    Moi tout ça me dépasse......c'est justement le fort de ce language offrir à des inhibés du bulbe comme moi, la puissance d'un language bas niveau

    Je t'ai juste tout expliqué en détail, afin que tu comprenne ma position et mes attentes, car je pense que tu as autre chose à faire que de jouer aux devinettes et perdre du temps à aider les gens à l'aveuglette sans vraiment savoir ce qu'il désirent

    J'ai beaucoup trop de respect pour vous, pour soit vous gener, soit vous faire perdre du temps, ou vous déplaire.
    Vous etes mes "héros", et la premiere chose que l'on doit à un MAITRE, c'est le respect et l'ecoute.

    Pour la suite, je ne peux pas vraiment t'aider sans le reste du code de ta DLL...
    Quel code de DLL ???
    Ouuuuiiiiinnn !!! je me tue à te dire que ça fait 2 mois que je veux faire cette DLL J'ai pas de DLL

    Parle tu de celle la ???
    Mais si elle est TLI, ça ne gazouille pas avec VB non ???
    Tu m'as dit qu'on pouvait si on avait le fichier de tete on pouvait faire du "early binding", et la je l'ai pas le fichier de tete ???
    J'suis un peu paumé

  15. #35
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    Alors la, ça deviens encore plus interessant
    Parce que MFC, je connais de nom et vois a peut pres à quoi ça sert
    DispHelper, alors la j'suis épaté parce que je vois que tu connais, je pensais que c'etait un code inventé par un inconnu et peu utilisé, mais apparement c'est quelque chose d'assez phénoménal
    Non, j'ai juste regardé ton lien. Rien qu'avec le nom, on peut deviner que DispHelper utilise le late binding (parce que le nom contient "disp", comme "Dispatch").
    Donc apparement, ce serait dans le "late-binding" que serait ma solution, puisque je veux etre compatible VB
    Late binding/Early binding, c'est seulement une distinction pour COM. Puisque tu veux faire une DLL non-COM pour appeler la DLL COM d'Extra, il n'y aura pas de distinction pour l'appel de ta DLL.

    J'ai utilisé le terme de "super language", mais ça n'engage que moi et tous ceux qui l'utilisent.
    Et comme je sais que ces utilisateurs sont des C-MAN, ça force le respect non ???
    Je pense que des programmeurs de ta trempe lorsqu'ils se penchent sur un language et quand ils arrivent du C, ont peut leur faire confiance quand à la qualité d'un language.
    Il y a surement d'autres languages aussi valable que celui-ci, mais je suis tombé sur lui, en cherchant un language performant, simple, et autonome.
    Et puis je ne veux pas entrer dans la polémique des languages, quel est le meilleur, le plus fort....mon papa est plus fort que le tiens ....
    Chacun voit le midi à sa porte, l'important, c'est qu'un language convienne à celui qui l'utilise

    Je n'ai pas donné le nom, par respect pour vous, on ne viens pas la "gueule enfariné" fanfaronner et parler d'un autre language sur un forum aussi respectable que celui-ci surtout dans une rubrique concernant le C, language innégalé par sa puissance.
    Je ne savais pas si j'avais le droit, donc dans l'ignorance s'abstenir
    Maintenant si, le nom t'interesse et si j'ai le droit, evidemment que je donnerais le nom pour que si tu le desire tu puisse te faire une idée par toi meme
    Ben, c'est surtout pour pouvoir mentionner le langage. Je ne savais pas comment l'appeler, justement car tu n'as pas donné le nom.

    Donc si j'ai bien compris, ce langage peut utiliser des DLLs normales mais pas des objets COM?
    Quel code de DLL ???
    Ouuuuiiiiinnn !!! je me tue à te dire que ça fait 2 mois que je veux faire cette DLL J'ai pas de DLL
    Parle tu de celle la ???
    Mais si elle est TLI, ça ne gazouille pas avec VB non ???
    J'suis un peu paumé
    Si dans ta DLL il y a juste les headers TLI, tu n'iras pas loin avec.
    Les headers TLI servent juste à permettre à ta DLL d'utiliser facilement la DLL COM d'Extra. Après, c'est à toi (peut-être avec de l'aide) d'écrire les fonctions de la DLL elle-même...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Non, j'ai juste regardé ton lien. Rien qu'avec le nom, on peut deviner que DispHelper utilise le late binding (parce que le nom contient "disp", comme "Dispatch").
    Trop fort !!!!

    Late binding/Early binding, c'est seulement une distinction pour COM. Puisque tu veux faire une DLL non-COM pour appeler la DLL COM d'Extra, il n'y aura pas de distinction pour l'appel de ta DLL.
    Bon d'accord, j'ai compris (enfin j'espere )

    Ben, c'est surtout pour pouvoir mentionner le langage. Je ne savais pas comment l'appeler, justement car tu n'as pas donné le nom.
    Donc si j'ai bien compris, ce langage peut utiliser des DLLs normales mais pas des objets COM?
    Bon ben, comme je ne sais toujours pas si je peux en parler, ou si ça t'interesse, on va l'apeller le "language masqué" = LM
    Alors LM non seulement peut appeller une DLL normales avec seulement 1 ligne, mais ce qui est formidable, c'est qu'il les créé
    Me demande pas comment, quel standard ou quoi ou qu'est ce, parce que j'en sait fichtrement rien
    Tout ce que je sais, c'est que je choisi dans le menu, exe ou dll et quand je compile comme dans le C, il me créé ce que je lui ai demandé.
    Et le miracle c'est que je peux utiliser ses DLL dans VB6 sans aucun probleme.
    Sans la declarer, pas de BDR, je donne le chemin, ou la met dans le repertoire racine, et c'est magique, un petit "private declare" et c'est comme si VB avait les fonctions en interne.
    Ce qui est chiant c'est que l'on ne peux pas faire l'inverse, puisque les DLL VB ne sont pas des DLL standard.
    Quand j'ai parlé des DLL dans son forum, on m'a dit que LM creait des DLL semblables au C.
    Et moi ça m'a suffit comme "explicage"
    Donc je me suis dit que si C il sait manier le COM, et je savais qu'il sait aussi creer les vrais DLL, normal c'est lui qui les a inventé et bah la boucle etait bouclée

    Si dans ta DLL il y a juste les headers TLI, tu n'iras pas loin avec.
    Les headers TLI servent juste à permettre à ta DLL d'utiliser facilement la DLL COM d'Extra. Après, c'est à toi (peut-être avec de l'aide) d'écrire les fonctions de la DLL elle-même...
    T'es en train de me dire avec beaucoup de tact et de douceur, que j'suis mort quoi ......

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Y'a une chose que je ne comprend pas.(Tu va me dire, y'en a pas qu'une ..)
    Y'a pas un moyen de faire "CreateObject" et creer une session facilement en C, sans avoir a fouiller dans les DLL d'extra ????
    Puisque justement c'est un standard .....

    Car VB, juste 3 lignes un create un get, un active session "ExtraSystem" et hop on est connecté, et VB il connait pourtant pas Extra.

    Alors pourquoi VC++, il sait pas faire lui, alors qu'il est mille fois plus puissant que VB

  18. #38
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    T'es en train de me dire avec beaucoup de tact et de douceur, que j'suis mort quoi ......
    Non, juste qu'il y a un minimum de boulot après l'importation des headers.

    Y'a une chose que je ne comprend pas.(Tu va me dire, y'en a pas qu'une ..)
    Y'a pas un moyen de faire "CreateObject" et creer une session facilement en C, sans avoir a fouiller dans les DLL d'extra ????
    Puisque justement c'est un standard .....
    Le problème, c'est que justement en C, on est supposé utiliser un fichier d'en-tête (.h) au lieu de la bibliothèque de types (.tlb). Heureusement, en C++ sous Visual, ce problème est résolu grâce à TLI.
    Ou bien, tu peux utiliser DispHelper à la place, qui apparemment est utilisable à la fois en C et en C++, en quelques lignes. D'après le peu que j'ai vu sur le site, on peut traduire pratiquement chaque ligne VB en une ou deux lignes de code C ou C++ utilisant DispHelper.

    Ce qu'il faut savoir, c'est que dans aucun des cas on n'a besoin de fouiller dans les DLLs d'Extra. Simplement, en C, quand on n'a pas disphelper ou bien quand on ne peut utiliser le late-binding, on peut être forcé de fouiller dans le .tlb (qui peut être caché dans une DLL, mais c'est rare).

    Si tu choisis d'utiliser DispHelper, tu pourras faire facilement ton code en C, sans soucis de #import ni de TLI etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Si tu choisis d'utiliser DispHelper, tu pourras faire facilement ton code en C, sans soucis de #import ni de TLI etc
    Bon d'accord, tu sais moi tout ce que je cherche à faire c'est envoyer 4 fonction à ce foutu #'¤@[-€ d'EXTRA.
    Et ceci avec le moyen le plus simple possible
    Dans LM c'est justement cette fonction "DispHelper" que le createur de la lib utilise et a adapté.
    Et c'est avec cette lib que j'ai le probleme de handle.
    Mais c'est suremment de ma faute, enfin j'espere.

    Tu as raison, ce serait une solution, d'utiliser "DispHelper" au moins apparement on a tout le code source

    Encore merci , merci et merci de ta bonté, heureusement que tu etais la...autrement je me serais cru seul au monde

    Bon je vais essayer, hop hop, mais en plus, tu va rire, je parle l'anglais comme une vache espagnole, ça promet ......

  20. #40
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    Dans LM c'est justement cette fonction "DispHelper" que le createur de la lib utilise et a adapté.
    ??
    Ben si LM utilise DispHelper, LM doit pouvoir utiliser directement des objets COM en late binding, non?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2009, 17h56
  2. Utilisation des objets COM
    Par jdelges dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 26/01/2007, 23h52
  3. Peut on utiliser un objet com avec eclipse
    Par MoiAussi dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/09/2006, 15h47
  4. [COM] Comment utiliser l'objet COM ?
    Par splinternabs dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 14/04/2006, 11h58
  5. [COM] Utilisation d'un objet COM
    Par Sophy75 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/04/2006, 18h43

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