Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi PWideChar zu DWord und zurück (https://www.delphipraxis.net/208322-pwidechar-zu-dword-und-zurueck.html)

venice2 14. Jul 2021 14:55

PWideChar zu DWord und zurück
 
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.

venice2 18. Jul 2021 09:28

AW: PWideChar zu DWord und zurück
 
Habe es jetzt so umgesetzt.
64Bit.

Delphi-Quellcode:
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz