AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FastCode und CopyMemory

Ein Thema von lbccaleb · begonnen am 10. Mär 2013 · letzter Beitrag vom 11. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit FastCode und CopyMemory

  Alt 10. Mär 2013, 21:19
Hallo,

Ich benutze folgende Funktion um Text in die Zwischenablage zu kopieren:

Delphi-Quellcode:
function SetClipText(szText: string): Boolean;
var
  pData: DWORD;
  dwSize: DWORD;
begin;
  Result := FALSE;
  OpenClipBoard(0);
  try
    EmptyClipboard;
    dwSize := Length(szText) + 1;
    if dwSize <> 0 then begin;
      pData := GlobalAlloc(MEM_COMMIT, dwSize);
      try
        CopyMemory(POINTER(pData), PChar(szText), dwSize);
        if SetClipBoardData(CF_TEXT, pData) <> 0 then
          Result := TRUE;
      except
        GlobalFree(pData);
        raise;
      end;
    end;
  finally
    CloseClipBoard;
  end;
end;
Das funktioniert auch immer Problemlos.
Aufeinmal allerdings nicht mehr, und die Fehlersuche ging los.

Durch das debuggen habe ich dann bemerkt, dass die eingebundene Unit FastCode dafür verantwortlich ist, dass dort irgendein Problem bei CopyMemory vorliegt.
Nur weil diese Funktion jetzt nicht geht, wollte ich allerdings nicht auf die FastCode Unit verzichten.

Gibt es also Jemanden der sich mit Assembler besser auskennt als ich, und den Fehler finden kann?
Beim Aufruf von CopyMemory springt er in die Unit FastMove in die Funktion "Forwards_SSE3_10;". Komischerweise rufe ich an anderen Stellen auch CopyMemory auf, und habe dort allerdings nicht die Probleme.

Kann es vllt. auch sein, das ich ein Fehler bei der Parameterübergabe von CopyMemory habe?

mfg Martin


Edit:
Achso, das Problem äußert sich übrigens darin, dass unter Verwendung von FastCode nichts mehr in die Zwischenablage kopiert wird.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)

Geändert von lbccaleb (10. Mär 2013 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Problem mit FastCode und CopyMemory

  Alt 10. Mär 2013, 21:34
Aus einem mir absolut nicht bekannten Grund, funktioniert es jetzt auf einmal.
Hat sich also erledigt
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Problem mit FastCode und CopyMemory

  Alt 10. Mär 2013, 22:48
Delphi-Quellcode:
dwSize := Length(szText) + 1;
    if dwSize <> 0 then begin;
Mmmmh. Ob das sinnvoll? Leerer Text liefert 1 zurück. Ich denke der Code sollte nur kopieren wenn wirklich ein Text vorliegt.

Und ab D2009 krachts eh da Char = 2 Byte ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Problem mit FastCode und CopyMemory

  Alt 10. Mär 2013, 22:57
Verwechselst Du da nicht sizeof und length ?
Soweit ich weiß, funktioniert length immer wie gewünscht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 07:30
Verwechselst Du da nicht sizeof und length ?
Soweit ich weiß, funktioniert length immer wie gewünscht.

Gruß
K-H
Length( 'Text' ) ergibt - egal ob Unicode oder nicht - immer 4 .
Den benötigten Speicher berechnet man aber sicher mit Length( 'Text' ) * SizeOf( Char ) , denn der ist bei nicht Unicode 4 und als Unicode 8
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 10:29
Verwechselst Du da nicht sizeof und length ?
Soweit ich weiß, funktioniert length immer wie gewünscht.

Gruß
K-H
Length( 'Text' ) ergibt - egal ob Unicode oder nicht - immer 4 .
Den benötigten Speicher berechnet man aber sicher mit Length( 'Text' ) * SizeOf( Char ) , denn der ist bei nicht Unicode 4 und als Unicode 8

Also müsste ich so den Speicher reservieren?

Delphi-Quellcode:
function SetClipText(szText: string): Boolean;
var
  pData: DWORD;
  dwSize: DWORD;
begin;
  Result := FALSE;
  OpenClipBoard(0);
  try
    EmptyClipboard;
    if Length(szText) > 0 then begin;
      dwSize := Length(szText) * SizeOf(Char);
      pData := GlobalAlloc(MEM_COMMIT, dwSize);
      try
        CopyMemory(POINTER(pData), PChar(szText), dwSize);
        Result := (SetClipBoardData(CF_TEXT, pData) <> 0);
      except
        GlobalFree(pData);
        raise;
      end;
    end;
  finally
    CloseClipBoard;
  end;
end;
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 10:35
Wieso überhaupt eine eigene Funktion?

Clipboard.AsText := szText
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 10:36
Bei mir fast alles immer nonVCL
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 10:39
Wenn du einen nullterminierten String übergeben musst, dann benötigst du noch ein Zeichen mehr als Speicher

Aber ansonsten passt das schon
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Problem mit FastCode und CopyMemory

  Alt 11. Mär 2013, 10:56
Bei mir fast alles immer nonVCL
Viel VCL wird bei TClipboard nicht eingebunden (nur Forms.pas).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz