AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi PWideChar zu DWord und zurück
Thema durchsuchen
Ansicht
Themen-Optionen

PWideChar zu DWord und zurück

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

n/a Beiträge
 
#1

PWideChar zu DWord und zurück

  Alt 14. Jul 2021, 15:55
Ich habe folgendes vor.

Winproc Rückgabe = LRESULT(NativeInt)
Ich möchte einen PWideChar zurückgeben. Ohne Export

Mein Ansatz..

Delphi-Quellcode:
function GetPluginName(handle: HVIS): PAnsiChar; stdcall;
begin

  Result := '';
  if handle <> 0 then
  begin
    Result := VisInfo^.VisPointer^.PluginName;
  end;
end;
Delphi-Quellcode:
          6:
            begin
              Result := Dword(GetPluginName(VisHandle));
              exit;
            end;
Aber wie kann ich eine SendMessage schicken um dann die Rückgabe DWord wieder in PWideChar zu konvertieren?
Eventuell gibt es ja noch eine andere Möglichkeit?

Also mein Anliegen ist aus der Funktion GetPluginName den PWideChar an meine 64Bit Anwendung zurückzugeben ohne Export (geht wohl schlecht bei EXE Oder? )

EDIT:
Ok Ich mache das auch über WM_COPYDATA ist wohl der einfachste weg.
Geht so nicht wie ich dachte.

Geändert von venice2 (14. Jul 2021 um 17:37 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: PWideChar zu DWord und zurück

  Alt 18. Jul 2021, 10:28
Habe es jetzt so umgesetzt.
64Bit.

SOP_GetPluginName;
Delphi-Quellcode:
function GetPluginName(WinHandle: HWND): string;
begin
  SetLength(Result, SendMessage(WinHandle, WM_GETTEXTLENGTH, 0, 0));
  if Result <> 'then
    SendMessage(WinHandle, WM_GETTEXT, Length(Result) + 1, LPARAM(PWideChar(Result)));
end;

procedure SOP_GetPluginName;
begin

  if (gp.hSOPlugin <> 0) then
  begin
    gCDS.dwData := dwData_GetPluginName;
    gCDS.cbData := SizeOf(gSOP);
    gCDS.lpData := @gSOP;
    SendMessage(gp.hSOPlugin, WM_COPYDATA, WPARAM(gP.MainHandle), LPARAM(@gCDS));
  end;

  Description := GetPluginName(gP.MainHandle);
end;
32Bit
Delphi-Quellcode:
var
  pCDS: PCopyDataStruct;
  aTemp: array[0..259] of Char;
begin

  case Msg of
    WM_COPYDATA:
      begin
        pCDS := Pointer(lP);
        case pCDS.dwData of
          6:
            begin
              PluginName := GetPluginName(VisHandle);
              StrPCopy(aTemp, string(PluginName));
              SendMessage(wp, WM_SETTEXT, SizeOf(aTemp), LPARAM(@aTemp));
            end;
        end;
        Result := 1;
        Exit;
      end;
  end;
  Result := DefWindowProc(WinHandle, Msg, wP, lP);

end;
Zeitanzeige hinzugefügt und ein paar andere Spielereien
Noch nen Button zum Ausschalten des Cover addiert

Tut was es soll

Geändert von venice2 (19. Jul 2021 um 23:34 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 17:41 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