Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi c code nach delphi (https://www.delphipraxis.net/41569-c-code-nach-delphi.html)

MatthiasW 5. Mär 2005 11:18


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:
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;
kann mir jemand helfen?

maynard 5. Mär 2005 11:21

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

Luckie 5. Mär 2005 11:32

Re: c code nach delphi
 
Guck einfach hier: http://www.luckie-online.de/Delphi/S..._COPYDATA.html

MatthiasW 5. Mär 2005 11:49

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?

Luckie 5. Mär 2005 11:56

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.

sniper_w 5. Mär 2005 12:04

Re: c code nach delphi
 
Zitat:

COPYDATASTRUCT *cpData = (COPYDATASTRUCT *)lParam;

if (cpData->dwData == 1) {
iconData = (NOTIFYICONDATA *) (((BYTE *)cpData->lpData) + 8 );
trayCommand = *(INT *) (((BYTE *)cpData->lpData) + 4);
}
So ganz "straightforward" wäre es:
Delphi-Quellcode:
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;
Ob es funct ist eine andere Frage.... :gruebel:

MatthiasW 5. Mär 2005 12:47

Re: c code nach delphi
 
Zitat:

Zitat von Luckie
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.

Ich schicke nicht sonder bekomme geschickt

Luckie 5. Mär 2005 12:49

Re: c code nach delphi
 
Wie man etwas empfängt, zeige ich doch auch mit meinem Code.

MatthiasW 5. Mär 2005 12:49

Re: c code nach delphi
 
Zitat:

Zitat von sniper_w
Zitat:

COPYDATASTRUCT *cpData = (COPYDATASTRUCT *)lParam;

if (cpData->dwData == 1) {
iconData = (NOTIFYICONDATA *) (((BYTE *)cpData->lpData) + 8 );
trayCommand = *(INT *) (((BYTE *)cpData->lpData) + 4);
}
So ganz "straightforward" wäre es:
Delphi-Quellcode:
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;
Ob es funct ist eine andere Frage.... :gruebel:

ich werds mal versuchen, danke

MatthiasW 5. Mär 2005 13:57

Re: c code nach delphi
 
Zitat:

Zitat von sniper_w
Zitat:

COPYDATASTRUCT *cpData = (COPYDATASTRUCT *)lParam;

if (cpData->dwData == 1) {
iconData = (NOTIFYICONDATA *) (((BYTE *)cpData->lpData) + 8 );
trayCommand = *(INT *) (((BYTE *)cpData->lpData) + 4);
}
So ganz "straightforward" wäre es:
Delphi-Quellcode:
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;
Ob es funct ist eine andere Frage.... :gruebel:

Also der PInteger löst eine Speicherschutzverletzung aus, die Zeile mit dem IconData scheint zu funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 2  1 2      

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