AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehlerhafte String auswertung
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerhafte String auswertung

Ein Thema von venice2 · begonnen am 11. Jul 2021 · letzter Beitrag vom 12. Jul 2021
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

Fehlerhafte String auswertung

  Alt 11. Jul 2021, 18:11
Delphi-Quellcode:
type
  PSOP64 = ^TSOP64;
  TSOP64 = record
    plugin: array[0..MAX_PATH] of AnsiChar;
  end;
Delphi-Quellcode:
var
  gCDS: COPYDATASTRUCT;
  gSOP: TSOP64;
Delphi-Quellcode:
procedure SOP_SetPlugin(Plugin: PWideChar);
begin
  if (gp.hSOPlugin <> 0) then
  begin
    FillChar(gSOP.plugin, 0, MAX_PATH);
    WideCharToMultiByte(CP_ACP, 0, Plugin, -1, gSOP.plugin, MAX_PATH, nil, nil);
    gCDS.dwData := 2;
    gCDS.cbData := SizeOf(gSOP);
    gCDS.lpData := @gSOP;
    SendMessage(gp.hSOPlugin, WM_COPYDATA, WPARAM(gP.MainHandle), LPARAM(@gCDS));
  end;
end;
gSOP.plugin ist als AnsiChar definiert und wird korrekt gefüllt.
Nach dem senden der Message ist aber in der anderen Exe der String Fehlerhaft.

Jemand eine Idee woran es liegt?
Beide Records sind gleich.

Hier sind die Daten falsch.
Delphi-Quellcode:
pSOP := @pCDS.lpData;
if (InitVisDll(pSOP.plugin)) then // <<<<< pSOP.plugin ist nicht der gleiche String
EDIT:
Ok.. Hat sich erledigt. Sorry

Die Lösung!
pSOP := @pCDS.lpData;
@ ist nicht gleich Pointer

So geht's.
pSOP := Pointer(pCDS.lpData);

Geändert von venice2 (12. Jul 2021 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Fehlerhafte String auswertung

  Alt 12. Jul 2021, 12:14
Wenn "plugin" als array[0..MAX_PATH] of AnsiChar; definiert ist
müsste es m.E. mit FillChar(gSOP.plugin, 0, MAX_PATH+1); gelöscht werden, weil sonst der letzte AnsiChar nicht gelöscht wird.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: Fehlerhafte String auswertung

  Alt 12. Jul 2021, 12:17
Wenn "plugin" als array[0..MAX_PATH] of AnsiChar; definiert ist
müsste es m.E. mit FillChar(gSOP.plugin, 0, MAX_PATH+1); gelöscht werden, weil sonst der letzte AnsiChar nicht gelöscht wird.
Danke werde es mal mit reinpacken.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fehlerhafte String auswertung

  Alt 12. Jul 2021, 12:26
Die Lösung!
pSOP := @pCDS.lpData;
@ ist nicht gleich Pointer

So geht's.
pSOP := Pointer(pCDS.lpData);


Doch, Beide sind Pointer.
* ein Zeiger auf die Variable (was du nicht wolltes)
* ein Zeiger, auf den die Variable zeigt (was du wolltest)



Aber sicher, dass die Definition stimmt?
Zitat:
array[0..MAX_PATH] of AnsiChar;
Wenn es MAX_PATH groß sein soll, dann
array[0..MAX_PATH-1] of AnsiChar;
oder
array[1..MAX_PATH] of AnsiChar;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: Fehlerhafte String auswertung

  Alt 12. Jul 2021, 12:33
Zitat:
Doch, Beide sind Pointer.
* ein Zeiger auf die Variable (was du nicht wolltes)
* ein Zeiger, auf den die Variable zeigt (was du wolltest)
Danke Super Erklärung wie immer und 32Bit.dll's Plugins laufen mit meiner 64Bit Anwendung.
Werde mir den Unterschied merken.

Geändert von venice2 (14. Jul 2021 um 21:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:11 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