Ĺadny brzuch
Witam!
Chciałbym się dowiedzieć czy byłby ktoś w stanie przetłumaczyć mi podany skrypt na kod delphi??
C++
void __fastcall TMainForm::LoadPlugins() { // Usuwanie wcześniej załadowanych pluginów UnloadPlugins(); // Wyszukiwanie wszystkich bibliotek DLL w katalogu roboczym TSearchRec sr; if(!FindFirst("*.dll", faAnyFile, sr)) do { // Ładowanie biblioteki DLLInstances[PluginCount] = LoadLibrary(sr.Name.c_str()); if(!DLLInstances[PluginCount]) continue; // Pobranie adresu funkcji zwracającej informacje o pluginie FPluginVer PluginVer = (FPluginVer) GetProcAddress(DLLInstances[PluginCount], "_PluginVer"); // Jeśli taka funkcja nie istnieje, prawdopodobnie natrafiliśmy na // jakąś inną bibliotekę niż nasz plugin if(!PluginVer) { FreeLibrary(DLLInstances[PluginCount]); continue; } // Odczytanie informacji o pluginie DWORD Ver; char PluginName[256]; PluginVer(Ver, PluginName, sizeof(PluginName)); // Pobranie adresu funkcji pluginu PluginFunctions[PluginCount] = (FShowSomething) GetProcAddress(DLLInstances[PluginCount], "_ShowSomething"); // Tworzenie nowego elementu menu PluginMenu[PluginCount] = new TMenuItem(MainMenu); PluginMenu[PluginCount]->Tag = PluginCount; // Indeks w tablicy PluginMenu[PluginCount]->onclick = MenuClick; PluginMenu[PluginCount]->Caption = sr.Name + ", \"" + PluginName + "\", Ver: " + IntToStr(HIBYTE(HIWORD(Ver))) + "." + IntToStr(LOBYTE(HIWORD(Ver))) + "." + IntToStr(HIBYTE(LOWORD(Ver))) + "." + IntToStr(LOBYTE(LOWORD(Ver))); // Dodanie utworzonego elementu do menu mnPlugins->Add(PluginMenu[PluginCount]); // Maksymalna liczba pluginów PluginCount++; if(PluginCount >= MaxPluginCount) break; } while(!FindNext(sr)); // Kończenie poszukiwań plików FindClose(sr); } void __fastcall TMainForm::UnloadPlugins() { // Usunięcie pluginów z pamieci for(int i = 0; i < PluginCount; i++) { delete PluginMenu[i]; FreeLibrary(DLLInstances[i]); } PluginCount = 0; }
Część już zrobiłem i oto efekty (nie wiem czy dobrze - bo to nie wszystko(dlej nie wiem co robić)):
procedure LoadPlugins; var sr: TSearchRec; ver: DWORD; PluginName: char; Dll: THandle; PluginVer: procedure; begin UnLoadPlugins; if (FindFirst('*.dll', faAnyFile, sr)=0) then begin DLL := LoadLibrary(PChar(sr.name)); @PluginVer := GetProcAddress(DLL,'PluginVer'); if @PluginVer=nil then begin FreeLibrary(DLL); end // i tu coś dalej mam być
Z góry dziękuje za pomoc
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Chciałbym się dowiedzieć czy byłby ktoś w stanie przetłumaczyć mi podany skrypt na kod delphi??
C++
void __fastcall TMainForm::LoadPlugins() { // Usuwanie wcześniej załadowanych pluginów UnloadPlugins(); // Wyszukiwanie wszystkich bibliotek DLL w katalogu roboczym TSearchRec sr; if(!FindFirst("*.dll", faAnyFile, sr)) do { // Ładowanie biblioteki DLLInstances[PluginCount] = LoadLibrary(sr.Name.c_str()); if(!DLLInstances[PluginCount]) continue; // Pobranie adresu funkcji zwracającej informacje o pluginie FPluginVer PluginVer = (FPluginVer) GetProcAddress(DLLInstances[PluginCount], "_PluginVer"); // Jeśli taka funkcja nie istnieje, prawdopodobnie natrafiliśmy na // jakąś inną bibliotekę niż nasz plugin if(!PluginVer) { FreeLibrary(DLLInstances[PluginCount]); continue; } // Odczytanie informacji o pluginie DWORD Ver; char PluginName[256]; PluginVer(Ver, PluginName, sizeof(PluginName)); // Pobranie adresu funkcji pluginu PluginFunctions[PluginCount] = (FShowSomething) GetProcAddress(DLLInstances[PluginCount], "_ShowSomething"); // Tworzenie nowego elementu menu PluginMenu[PluginCount] = new TMenuItem(MainMenu); PluginMenu[PluginCount]->Tag = PluginCount; // Indeks w tablicy PluginMenu[PluginCount]->onclick = MenuClick; PluginMenu[PluginCount]->Caption = sr.Name + ", \"" + PluginName + "\", Ver: " + IntToStr(HIBYTE(HIWORD(Ver))) + "." + IntToStr(LOBYTE(HIWORD(Ver))) + "." + IntToStr(HIBYTE(LOWORD(Ver))) + "." + IntToStr(LOBYTE(LOWORD(Ver))); // Dodanie utworzonego elementu do menu mnPlugins->Add(PluginMenu[PluginCount]); // Maksymalna liczba pluginów PluginCount++; if(PluginCount >= MaxPluginCount) break; } while(!FindNext(sr)); // Kończenie poszukiwań plików FindClose(sr); } void __fastcall TMainForm::UnloadPlugins() { // Usunięcie pluginów z pamieci for(int i = 0; i < PluginCount; i++) { delete PluginMenu[i]; FreeLibrary(DLLInstances[i]); } PluginCount = 0; }
Część już zrobiłem i oto efekty (nie wiem czy dobrze - bo to nie wszystko(dlej nie wiem co robić)):
procedure LoadPlugins; var sr: TSearchRec; ver: DWORD; PluginName: char; Dll: THandle; PluginVer: procedure; begin UnLoadPlugins; if (FindFirst('*.dll', faAnyFile, sr)=0) then begin DLL := LoadLibrary(PChar(sr.name)); @PluginVer := GetProcAddress(DLL,'PluginVer'); if @PluginVer=nil then begin FreeLibrary(DLL); end // i tu coś dalej mam być
Z góry dziękuje za pomoc