Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ShlObj: Implementierung der Interface-Methode IContextMenu (https://www.delphipraxis.net/163445-shlobj-implementierung-der-interface-methode-icontextmenu.html)

Mavarik 29. Sep 2011 08:29

ShlObj: Implementierung der Interface-Methode IContextMenu
 
Hallo Leute!

E2291: {Winapi.}ShlObj: Implementierung der Interface-Methode IContextMenu:GetCommandString fehlt.

Ähhhh und jetzt?
Was ist zu tun?

Grüsse Mavarik :coder:

PS.: Ich glaube nicht mehr daran, dass auch nur einer ein altes & großes Projekt auf XE/XE2 umgebaut hat...Mit ist so weinerlich...

CCRDude 29. Sep 2011 08:33

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Was jetzt? Glaskugel auspacken und raten vielleicht?

Fehlt Sie denn nun, oder nicht?

Und da ich mich gestern mit genau jener rumgeschlagen habe: achte beid en Unicode-Flags auf den Datentyp, den Du an LPSTR übergibst!

PS: Kopf hoch, ist zwar viel Fleißarbeit, aber machbar :)

Union 29. Sep 2011 09:10

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Was hast Du gemacht? Wahrscheinlich mit Copy / Paste irgendwelchen Code übernommen. Ich schätze mal Dein Code sieht ca. so aus:
Delphi-Quellcode:
function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
       pszName: LPSTR; cchMax: UINT): HResult; stdcall;
Wenn man sich dann die Definition dann anschaut stellt man fest dass die nicht mehr passt. idCmd ist nämlich jetzt als UINT_PTR definiert. Deshalb passte die Signatur nicht usw...

Zitat:

PS.: Ich glaube nicht mehr daran, dass auch nur einer ein altes & großes Projekt auf XE/XE2 umgebaut hat...Mit ist so weinerlich...
Doch doch, das geht. Gerade gestern fertig geworden. Muss natürlich noch komplett getestet werden. Hauptproblem waren die externen Komponenten (glücklicherweise nur 4).

CCRDude 29. Sep 2011 12:41

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Weil ich das in der MSDN nicht gefunden habe und Du Union Dich damit auszukennen scheinst: was ist eigentlich der Default-Rückgabewert, wenn man dort gar nichts macht?

Copy'n'Paste-Beispiele springen da zwischen S_OK und E_INVALIDARG.

(Nachtrag: Entschuldigung, jetzt doch gefunden :) )

Mavarik 29. Sep 2011 14:44

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Nein!

Einfach nur mit XE2 übersetzt.. Das ist ne Fehlermeldung die in Shlobj kommt...


Mavarik

Union 29. Sep 2011 15:28

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Was meinst Du mit "Nein"? Wie sieht der Source aus den Du versucht hast zu kompilieren?

Mavarik 4. Okt 2011 13:48

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Zitat:

Zitat von Union (Beitrag 1127520)
Was meinst Du mit "Nein"? Wie sieht der Source aus den Du versucht hast zu kompilieren?

Der Code:


Delphi-Quellcode:
  TDropContextMenu = class(TInterfacedComponent, IShellExtInit, IContextMenu)
Mit D2007 compiliert das einwandfrei!

Grüsse Mavarik

Mavarik 4. Okt 2011 14:37

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Habs...

Dank Datas Beitrag...

Delphi-Quellcode:
{$IFDEF VER230}
    function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
       pszName: LPSTR; cchMax: UINT): HResult; stdcall;
{$ELSE}
    function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
      pszName: LPSTR; cchMax: UINT): HResult; stdcall;
{$ENDIF}
Grüsse Mavarik

Union 4. Okt 2011 14:55

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Wenn Du die Antworten hier lesen würdest, hättest Du es schon eine Woche früher gehabt :(
Zitat:

Zitat von Union (Beitrag 1127383)
idCmd ist nämlich jetzt als UINT_PTR definiert. Deshalb passte die Signatur nicht usw...


Bernhard Geyer 4. Okt 2011 15:01

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Zitat:

Zitat von Union (Beitrag 1128370)
Wenn Du die Antworten hier lesen würdest, hättest Du es schon eine Woche früher gehabt :(

Wie es aussieht ist auch der Parameter uFlags weggefallen.

Union 4. Okt 2011 15:03

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Der wurde nur umbenannt, ändert nichts an der Parameter Signatur.

himitsu 4. Okt 2011 15:03

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Damit die codes nicht zu sehr ausarten (falls/wenn man UINT_PTR nochmal braucht)
Delphi-Quellcode:
{$IFNDEF VER230}
  type UINT_PTR = UINT;
{$ENDIF}

function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
  pszName: LPSTR; cchMax: UINT): HResult; stdcall;

oder besser so (dafür kann man sich ja mal eine kleine Types-Unit zusammenstellen)
Delphi-Quellcode:
// ebenfalls die CompilerVersion prüfen
{$IF CompilerVersion < 23.0}
  type UINT_PTR = UINT;
{$IFEND}

// auf den Typen selber prüfen
{$IF not Declared(UINT_PTR)}  // es gibt auch Defined, für Compilerschalter
  type UINT_PTR = UINT;
{$IFEND}


Dieses IFDEF VERxxx hat einen sehr großen Nachteil. Es ist immer auf genau eine Version ausgelegt, aber meistens will man ja etwas ab/bis zu einer bestimmten Version haben.

Bernhard Geyer 4. Okt 2011 15:13

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Zitat:

Zitat von Union (Beitrag 1128374)
Der wurde nur umbenannt, ändert nichts an der Parameter Signatur.

Äh, stimmt. Irgendwie hatte ich da noch einen weiteren Parameter gesehen :wall:

Mavarik 4. Okt 2011 15:20

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Zitat:

Zitat von Union (Beitrag 1128370)
Wenn Du die Antworten hier lesen würdest, hättest Du es schon eine Woche früher gehabt :(

Ich habe das Problem nicht "gleichgesetzt" daher auch nicht verstanden!

Mavarik

PS.: Trotzdem Danke für die Ermahnung! :twisted: Genau das was ich auch noch brauche bei den ganzen Umstellungsproblemen...

Union 4. Okt 2011 15:35

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Immer wieder gerne ;) Meine Umstellung ist durch, habs wegen unerklärlicher Instabilitäten in der IDE und im Kompilat aber wieder gelöscht.

Mavarik 4. Okt 2011 15:41

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Zitat:

Zitat von Union (Beitrag 1128389)
Immer wieder gerne ;) Meine Umstellung ist durch, habs wegen unerklärlicher Instabilitäten in der IDE und im Kompilat aber wieder gelöscht.

WOW Du kannst einem echt Mut machen...

Union 4. Okt 2011 15:57

AW: ShlObj: Implementierung der Interface-Methode IContextMenu
 
Aber ich hab ein Umstellungsprotokoll, sobald XE2 ein paar Fortschritte macht wird es erneut versucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 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