![]() |
c code nach delphi
ich möchte eine c - source nach Delphi umsetzen, weiß aber bei folgendem code net so richtig wie ich das umsetze:
COPYDATASTRUCT *cpData = (COPYDATASTRUCT *)lParam; if (cpData->dwData == 1) { iconData = (NOTIFYICONDATA *) (((BYTE *)cpData->lpData) + 8 ); trayCommand = *(INT *) (((BYTE *)cpData->lpData) + 4); } mein bisheriger Lösungsansatz ist wie folgt:
Delphi-Quellcode:
kann mir jemand helfen?
var pCopyData: Pointer;
cpData: ^TCopyDataStruct; IconData: ^NOTIFYICONDATA; pByte: ^Byte; begin case Msg of WM_COPYDATA: begin //get data from adress pCopyData := Ptr(lParam); if pCopyData <> nil then begin cpData := pCopyData; if cpData^.dwData = 1 then begin pByte := cpData.lpData; pByte^ := pByte^ + 8; pCopyData:= Ptr(pByte^); IconData := pCopyData; end; end; end; else Result := DefWindowProc(Handle,Msg,wParam,lParam); end; end; |
Re: c code nach delphi
Tach...
Hab grad keine Zeit, aber schau morgen mal drüber. Bist du dir sicher, dass COPYDATASTRUCT in der WINAPI als void - Zeiger deklariert ist ? MfG |
Re: c code nach delphi
Guck einfach hier:
![]() |
Re: c code nach delphi
ganz so einfach ists leider net, da sich der Code in einer DLL befindet und die Abfrage der COPDYDataStruct ja in der Fensterprocedure der "TrayNotifyClass" stattfindet. Ist mein Ansatz um an die übergebene CopyDataStrut zu kommen denn erstmal richtig?
|
Re: c code nach delphi
Wo ist denn da der unterschied? Du schickst mit WM_COPYDATA Daten an ein Fenster oder? Von wo du schickst ist doch egal. Und au´ßerdem geht es dir ja um den Aufruf und das Vorgehen mit der Struktur.
|
Re: c code nach delphi
Zitat:
Delphi-Quellcode:
Ob es funct ist eine andere Frage.... :gruebel:
type PCOPYDATASTRUCT = ^COPYDATASTRUCT;
var cpData : PCOPYDATASTRUCT; begin cpData := PCOPYDATASTRUCT(lParam); if (cpData^.dwData = 1) then begin iconData := ^NOTIFYICONDATA ( ( ( PBYTE(cpData->lpData) ) + 8 ) ); trayCommand := ( pinteger( ( ( PBYTE(cpData^.lpData)) + 4) ))^; end; |
Re: c code nach delphi
Zitat:
|
Re: c code nach delphi
Wie man etwas empfängt, zeige ich doch auch mit meinem Code.
|
Re: c code nach delphi
Zitat:
|
Re: c code nach delphi
Zitat:
|
Re: c code nach delphi
ne, das ist in beiden Zeilen dasselbe: sobald ich versuche den Wert abzufragen kommt ein Fehler das zu viele Exeptions aufgetreten sind
also
Delphi-Quellcode:
klappt nicht. Die Daten aus der CopyDataStruct können aber abgefragt werden (wenn ich auf einen dieser Werte zugreife wird keine Exception ausgelöst).
IconData := PNOTIFYICONDATA(((PByte(cpData^.lpData))^+8));
iTrayCommand := (PInteger((PByte(cpData^.lpData))^ + 4))^; |
Re: c code nach delphi
Ich weis nicht, ob es unter C mit dem PByte klappt, aber unter Delphi sollte es so aussehen, wenn man einen Zeiger erhöhen will:
Delphi-Quellcode:
Allerdings würde ich auch Luckies Record-Variante vorziehen, sie ist einfacher und führt zum selben Ergebnis.
begin
cpData := PCOPYDATASTRUCT(lParam); if (cpData^.dwData = 1) then begin iconData := PNOTIFYICONDATA( ( ( Integer(cpData^.lpData) ) + 8 ) ); itrayCommand := pinteger( ( ( Integer(cpData^.lpData) ) + 4 ) )^; end; end; |
Re: c code nach delphi
Delphi-Quellcode:
Was sind eingentlich IconData und iTrayCommand ? Ein Cardinal und ein Integer ?
IconData := PNOTIFYICONDATA(((PByte(cpData^.lpData))^+8));
iTrayCommand := (PInteger((PByte(cpData^.lpData))^ + 4))^; |
Re: c code nach delphi
Zitat:
|
Re: c code nach delphi
Zitat:
bei Luckies Variante blicke ich leider net ganz durch wie ich da den Zeiger erhöhen soll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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