c ++ - Registrering af Windows-kontekstmenuhåndterer, der leveres af Microsofts All-In-One-ramme (CppShellExtContextMenuHandler-projekt)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brugt CppShellExtContextMenuHandler-prøveprojektet fra Microsofts All-In-One-ramme til at tilføje et brugerdefineret menupunkt + ikon til Windows 'kontekstmenu.


Det ser imidlertid ud til, at jeg ikke kan registrere DLL'en fra denne stikprøve på andre computere end min. DLL'en, der er udarbejdet på en Windows 7 x86-maskine fra umodificeret kode, kører ikke på:



  • En anden Windows 7 x86

  • En ny Windows XP SP3 x86-installation på VirtualBox



Jeg får:



  LoadLibrary (CppShellExtContextMenuHandler.dll) kunne ikke finde
  specificeret procedure



(oversat) på XP-maskinen



  Modulet 'CppShellExtContextMenuHandler.dll'
  kunne ikke læses.

  
  Sørg for, at binæret er gemt på den angivne sti eller debug det for at kontrollere problemer med de binære eller afhængige .DLL-filer.

  
  Det angivne modul kunne ikke findes



på den anden Windows 7-maskine


Jeg bruger Regsvr32 CppShellExtContextMenuHandler.dll i kommandolinjen til at registrere DLL'en.


Er der nogen der støder på dette problem? Har jeg savnet noget (afhængigheder/projektkonfiguration)?
Jeg er ikke sikker på, hvordan du debugger denne.


Tak for din hjælp!


PS1: Kode er tilgængelig her: http://1code.codeplex.com/releases/view/71395, under ./Visual Studio 2010/CppShellExtContextMenuHandler i pakken. [2]


PS2: Kompileret version af prøven er her: https://fgt.bo/GmQ[3]

Bedste reference


Endelig fundet svaret takket være valg af en implementeringsmetode på MSDN. [4]


For at gøre DLL-filen kompileret fra CppShellExtContextMenuHandler-prøvearbejdet på ikke-dev-computere, skal du ledsage det med VC ++ Runtime DLL'erne, som det afhænger af.


Jeg brugte det vidunderlige værktøj på en klientens (ikke-dev) maskine for at få navnet på DLL'erne, som min kontekstmenuhandler var afhængig af (værktøjet angiver, hvilke af dem der mangler på argetcomputeren!). [5]


Det viste sig, at jeg måtte omfordele msvcr100.dll og msvcp100.dll-filer fra [[Program Files \ Microsoft Visual Studio 10.0 \ VC \ Redist]] sammen med filen CppShellExtContextMenuHandler.dll for at få det til at fungere.


For at få handleren til at arbejde på Windows XP, måtte jeg også erstatte de to forekomster af



  hr=HRESULT\_FROM\_WIN32 (RegDeleteTree (...



ved:



  hr=SHDeleteKey (...



... i reg.cpp filen. Faktisk er RegDeleteTree-funktionen ifølge C ++ Windows Shell kontekstmenuhåndteringsprøve ikke tilgængelig på XP.
SHDeleteKey er ækvivalent og kan findes i Shlwapi.h, på alle versioner af Windows jeg testede. [6]


Tak for din tid læsning og forsøger at løse dette!