Pánové, zabývá se tady někdo z vás programováním DLLek? Řekněme, že bych chtěl např. do shell32.dll (64b verze) nebo jiné existující 64b dllky v céčku přidat vlastní funkci. Jakým způsobem by to bylo nejsnadněji řešitelné? Vím že se často používá tzv. proxy DLL, která v podstatě linkuje funkce z originální knihovny a může některé nahrazovat nebo přidávat nové. Nevíte o nějakých automatizovaných nástrojích co by udělaly kostru zdrojáku a popř. jiné podklady pro projekt v M$VS? Chvíli jsem hledal a našel jsem jen na codeproject docela obskurní prográmek wrappit2, resp. jeho kód (ten naštěstí šel na rozdíl od různých tzv. multiplatformních hromad sraček v pohodě zkompilovat pod M$VS). Každopádně nezdá se, že by z něj lezlo co by správně mělo, soudě podle cpp souboru ve kterém skoro nic není. Vygenerovaly se tyto soubory:
shell32.dll.1.def
shell32.dll.2.def - některý z nich by se měl přidat do projektu v M$VS?
shell32.dll.cpp - nějaké krátké, přikládám dole
shell32.dll.exp - tohle nemám nejmenší tušení na co je
shell32.dll.exports - že by jen nějaký mezikrok pro vygenerování zbytku?
shell32.dll.lib - tu bych správně neměl potřebovat, nebo snad jo?
shell32old.dll - 1:1 kopie původní DLLky, jen pod jiným názvem (aby proxy nelinkovala stejnojmennou DLLku?).
Dokázali byste někdo poradit, jestli je to, co mi to vygrclo, v pořádku, jak to použít a jakým způsobem bych mohl přidat novou funkci? A nebo mám na to jít úplně jinak? Díky za případnou pomoc.
shell32.dll.cpp
#include <windows.h>
#include <tchar.h>
HINSTANCE hLThis = 0;
HINSTANCE hL = 0;
FARPROC p[466] = {0};
BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
hLThis = hInst;
hL = LoadLibrary(_T("shell32OLD.DLL"));
if (!hL) return false;
}
if (reason == DLL_PROCESS_DETACH)
{
FreeLibrary(hL);
}
return 1;
}
// toť vše
shell32.dll.1.def
EXPORTS
Activate_RunDLL @105
AppCompat_RunDLLW @106
CDefFolderMenu_Create @700
CDefFolderMenu_Create2 @701
CallCPLEntry16 @166
CheckEscapesA @107
CheckEscapesW @108
... pro každou funkci
shell32.dll.2.def
EXPORTS
Activate_RunDLL=shell32OLD.Activate_RunDLL @105
AppCompat_RunDLLW=shell32OLD.AppCompat_RunDLLW @106
CDefFolderMenu_Create=shell32OLD.CDefFolderMenu_Create @700
CDefFolderMenu_Create2=shell32OLD.CDefFolderMenu_Create2 @701
CallCPLEntry16=shell32OLD.CallCPLEntry16 @166
CheckEscapesA=shell32OLD.CheckEscapesA @107
CheckEscapesW=shell32OLD.CheckEscapesW @108
... pro každou funkci
