Results 1 to 3 of 3

Thread: C++ -> delphi problem

  1. #1

    C++ -> delphi problem

    Ik ben bezig C++ code naar Delphi om te zetten, en loop tegen een aantal zaken aan waarvoor ik een oplossing zoek.

    In de code waarin een programma gestart wordt waarmee gecommuniceerd wordt, kom ik de volgende definities tegen:

    Code:
    TAutoDriver<IDispatch>
    TAutoArgs<n>
    (n=1,2..)

    TAutoDriver lijkt de methods bind and unbind te definiëren waarmee programma's aan elkaar gekoppeld worden (DDE, OLE?)

    Volgens de IDE staan deze in utilcls.h, en die heeft kennelijk geen Delphi equivalent.
    Hoe kan ik hier omheen? (link is ok )


    In dezelfde procedure kom ik de volgende constructie tegen - ik vermoed dat daarmee gegevens tussen de programma's worden uitgewisseld:

    in C++ staat
    Code:
    TClipboard *clipboard = Clipboard();
    clipboard->Open();
    clipboard->Clear();
    clipboard->SetTextBuf( text ); of clipboard->GetTextBuf( text );
    clipboard->Close();
    Als ik het goed heb vertaalt dit naar:

    Code:
    var
      clipboard : TClipboard;
    
    begin
    ...
      clipboard = TClipboard.create;
      clipboard.Open();
      clipboard.Clear();
      clipboard.SetTextBuf( text );
      clipboard.Close();
    ...
    maar ook hier: Wat is het equivalent voor Delphi?

    (NB. Delphi2007. het project is erop gericht dat C++ uitgefaseerd wordt zodat we (eindelijk) de code naar de laatste Delphi versie kunnen opwaarderen (een project op zich...))

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    In Delphi maak je geen instantie aan van het Clipboard: dit is een wrapper rond het Windows klembord en moet je direct aanroepen (net als printers).

    Delphi Code:
    1. uses
    2.   Clipbrd;
    3.  
    4. function GetTekstVanClipboard: string;
    5. begin
    6.   if Clipboard.HasFormat(CF_TEXT) then
    7.     Result := Clipboard.AsText
    8.   else
    9.     Result := '';
    10. end;

    In jouw voorbeeld hoef je het clipboard niet te openen en te sluiten bij het zetten van (bijvoorbeeld) een tekst (dit gebeurt achter de schermen):
    Delphi Code:
    1. uses
    2.   Clipbrd;
    3.  
    4. procedure ZetTekstOpClipboard(AText: string);
    5. begin
    6.   Clipboard.AsText := AText;
    7. end;
    Mocht je .SetTextBuf moeten gebruiken, dan moet je wel gebruik maken van .Open en .Close, maar doe dit dan wel binnen een try...finally want anders kunnen andere processen niet meer bij het klemboard wanneer er iets mis gaan in jouw code (en er een exceptie optreedt).

    De kunst van het porten is dat je niet letterlijk code vertaald, maar alleen de functionaliteit.
    Last edited by VideoRipper; 18-Aug-17 at 20:26.
    TMemoryLeak.Create(Nil);

  3. #3
    Quote Originally Posted by VideoRipper View Post
    De kunst van het porten is dat je niet letterlijk code vertaald, maar alleen de functionaliteit.
    op zich mee eens, maar dat gaat hier niet op. Het gaat hier om communicatie tsseun twee onafhankelijke programma's waarbij ik maar op één controle heb; de ander is van een andere partij, is al in gebruik en ik heb daar geen controle op - noch op het programma zelf noch op de gebruikers ervan. Die koppeling is in C++ geschreven en moet in delhi exact hetzelfde doen. Weten wat je moet opnemen in de code ('uses') helpt daarbij, en helemaal als de classes en methods overeenkomen... Clipboard is nu ingebouwd, en de andere punten heb ik via een vergelijkbare koppeling die al in Delphi is geprogrammeerd (en met struinen op Internet...) al kunnen omzetten (hoop ik).

    Volgende problem: Callback routines (zowel procedure als functie) en DDE. Eerste heb ik waarschijnlijk al gevonden, maar DDE is een heel ander verhaal. op internet zijn geen duidelijke voorbeelden te vinden, en de documentatie van Embarcadero is evenmin behulpzaam. De voorbeelden die ik gevondne heb ontberen de te gebruiken libraries en gaan altijd ut van forms (en VCL controls) of externe componenten, terwijl ik beperkt ben tot niet-form gebonden code, zonder externe objecten (Dat moet toch mogelijk zijn ?).

    (UPDATE) Al wat gevonden, door de Codegear folders te doorzoeken: vond daar ddeml.pas, Daarmee lijkt een paar punten te zijn opgelost
    Last edited by WillemGrooters; 07-Sep-17 at 13:31. Reason: (deels) opgelost

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •