Skocz do zawartości

[delphi] string jako polecenie


DarkAndrew

Polecane posty

[quote] Zastanawia mnie jedna sprawa czy da się użyć w programie stringa tak aby służył jak np if czyli [code=Delphi]
  1. polecenie:='if' [/code]

  2. polecenie x>y then nieważne co dalej; [/quote]
A do czego potrzebna Tobie taka konstrukcja ? Na pewno można to zrobić inaczej (jak np napisał Iskar). Delphi nie jest skryptowy, nie będzie w nim czegoś na wzór eval() znanego z php, perla itd.

҉

Link do komentarza
Udostępnij na innych stronach

Hihi... może i głupoty, ale czasem by sięprzydałą taka możliwość biggrin.gif
[b]Narazie trzeba dobrze się zastanawiać nad możliwymi opcjami, a mając możliwosć np. wpisania polecenia do edita, albo memo etc. możnaby zrobić coś bardziej uniwersalnego... Tylko że do tego trzebaby mieć kompilator w programie biggrin.gif (żeby samemu nie przepisywać - bo to jest powrót do punktu wyjścia)

Link do komentarza
Udostępnij na innych stronach

Nad tym też myslałem to by się przyjeło w api client-serwer że np serwer wysyła kodzik do clienta a ten go wykonuje, gdyby się ktoś uparł to to by się genialnie do trojanów nadawało ale ja taki "złośliwy" to nie jestem. Wracając można by poszerzać klienta o nowe opcja taki auto-update.

"Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek

Link do komentarza
Udostępnij na innych stronach

Ja k już jesteśmy przy bibliotekach dynamicznych:
w powerGG jest coś takiego, że można dodawać dowolne wtyczki (biblioteki o dowolnych nazwach) do katalogu Plugs, i wystarczy zmodyfikować tekstowy plik konfiguracyjny, aby zacząć ich używać.
Jak to jest zrobione, że program główny PGG może używać funkcji, które nie były podane przed kompilacją? (w pliku konfiguracyjnym znajdują się TYLKO nazwy bibliotek, które mają być dostępne dla użytkownika)
Link do komentarza
Udostępnij na innych stronach

Tak samo mozliwe jak w konnekcie, mirandzie, winampie, etc wink.gif choc niekoniecznie tak samo rozwiazane. Poszukaj sobie na stronie winampa sdkow do pisania pluginow dla niego. Powinienes dzieki temu zalapac jak sie takie rzeczy rozwiazuje.

Down With The Sickness :)

Link do komentarza
Udostępnij na innych stronach

Jest funkcja LoadLibary (podajesz jej nazwę pliku), który otwiera bibliotekę (dll), a następnie można odczytać dowolną funkcję (jeśli zna się jej nazwę/numer). Program może wyszukać wszystkie pliki w katalogu (o rozszerzeniu .dll) i załadować je z osobna.

Tak, to wygląda w skrócie.

҉

Link do komentarza
Udostępnij na innych stronach

Moze sie przyda, kodu nie tlumacze bo bardzo dawno temu go pisalem ale z grubsza sluzy do dynamicznego ladowania dll'i i odpalania okreslonych metod
[code=Delphi]
unit DllImporter;

interface
uses ShareMem, sysutils, t[U[X[B&Vg26G&3&W6W&6W7G&ćp4FĆWV7WFVBuW'V6ź4(ąąUą5Ń74; skasowany z pamici';
type
TDllImporter = class
XXBXX]J[ĘNFW7G'V7F\"FW7G&śfW'&FS&6VGŃĄŃ4(dure GetStop;
procedure CloseCurrentDll;B[[]X]S[[S[YN[B&6VGW&R&WVW7D7FfTGVĆU&Vg3&fFPąąQąą%ź4(ąą%Ńnce: HINST;
FDllMasterForm:TForm;
fActiQ[YN[BBYH][ĘĆTćS7G&ćrgVć7FvWDFĆ6VCFVvW#4(YąŃąą4(ŃIadDllInfo(const i: integer): TDllInfo;
published
H[[YXY][BV&Ć0&W'GFĆćfś67BŚFVvW%ÓDFĆźIąą%ź4(4(4(4)4(QĄąą%ŃDllImporter=nil;
implementation

resourcestring
sDllSXH Z[H[IM
B[[H M
b3SsśBvWvG'Ś&w&Rs4FĆRtvFvRs5f]4(4)Qąą%Ń4(4)QąImporter.CloseCurrentDll;
var
CleanProc : TCleanProc;
Y[BY[[HH[^]BX[H]&4FG&W72dFĆ7Fć6R6\"t6Ć6TFĆrb76vĄ
ąAŃĄ4(
ąA4(4(1ąąnstance );
FDllInstance := 0;
FDllMasterForm := nil;B[ĘŃ[YY
NB[BBX[7&VFR67BF#7G&ćrf 7#E6V&6&V3Ś&VvQĄąą%Ńą4(ąą4(ąą%Ń := 0;
FDllMasterForm := nil;

MasterLabel.CaptiHŃXBY]YKHBY]YKfVRŁb77WF2fćDf'7BF\"rćFĆr7\"ŃĄ4(4(15YąoadGauge.MaxValue + 1;
until sysutils.FindNext(sr) &lB][[JNB[BBY7WF2fćDf'7BF\"rćFĆr7\"FV&Vv4(Ńąą%źŹ94(1ge.Progress := LoadGauge.Progress + 1;
Application.ÓYYB[[][[^
H 77WF2fćD6Ć6R7\"VćCfĆFFTFĆ4(5Ń1
Ń%ą4)4(4)ŃŃQąąmporter.Destroy;
begin
FDlls := nil;
CloseCurrentDlBQ[H[B[]YB[BBYRDFĆ'FW\"WV7WFR67BćRfW'67G&ćrf ąŃ4(Ń4(ŃQąą%ź4(Proc : TExecProc;
IGProc : TImportGlobalsProc;
begin
Y[[H [Y[BHHYYQrt&V6ćRŚW7BW'V6ŚVFVGRb3CsCwrW'V6VźŃź-ŃŃ]rning, [mbYes, mbNo], 0);
if i = mrYes then
P[B[CB^]B[B7Fć6RŁdFĆ7FW$f&ŁćŁÓŃź!ąąź4(ĄYon,[FDlls[ t ].FVer ] );
if ( s = version ) and (nameHK[YH
H[Y[BHHB'&VłVćCVćCbÓFV&VvMĄ5%Ńą4(4(4(emp := FDlls[ i ];
s := temp.FFile;
FDllInstance := YXJĘH
NBBQH]YĘ7Fć6R6\"t'DvĆ&2rb76vćVBu&2ŃĄ4(%A5Ń5Ń15ePrc, GlobalPrefs );
end else
LogError( sInternal
QĘNBB^XH]YĘ[ć6R6\& quot;tWV7WFRrd7FfTFĆćRŁćSĄAŃĄ4(A
5Ń, FDllMasterForm );
LogInfo(sDllExecuted+':'+name);
[[CBŃ[[
^XĘNBVćCŚgVć7FDFĆ'FW\"vWD7FfTGVĆTćS7G&ćsŚ&4(Ńąą9ąŃĄ4(IąActiveDllName
else
Result := 'BaseApp';
end;

[[[][[YBY[B[ŁĆVćwFdFĆ2ŚVćC&6VGW&RDFĆ'FW\"vWDFĆźĄą9Ń4)4(!Ń!%9MP4(%foProc: TGetDllInfo;
temp : TDllInfo;
begin
HinstanHHYXJ[S[YJH
NB[H]FG&W727Fć6R6\"tvWDFĆćfrćf&2FV4(1!%Ń4(ŃQąŃą;
temp.FFile := FileName;

if FDlls = nil then
][
H
CB[CB][
ćwFdFĆ2dFĆ5vdFĆ2ŁFVŚVć4(4)Qąą%ŃŃMŃ4)4(ŃMŃAGetStopProc;
begin
GetStopProc := GetProcAddress( FDllI[K Ń][[T ĘH
NBYYY
]2FVvWE7F&2VćvćU7FV6PVćvćMŃ4)4(4)ŃQąą%ŃIąą%źĄ i: integer): TDllInfo;
begin
Result.FName := '';
R[HB[]]H BY
H \"fwCvdFĆ2FVWC&W7VBŁdFĆ5t4)4(4)Qąą%ŃIŃŃ5ąA
var
proc: TGetPrefsProc;
begin
Proc := GetProcAddrĘ[[K Ń]YĘH
NBYYY
ĘFV&3ŚVćC&6VGW&RDFĆ'FW\"fĆFFTFą4)4(ąąQŃ4(ŃQąą%o;
begin
//sprawdzany poprawnosc, czy nie ma dwoch modoBX[^X^XHXBŃ[HBf\"BŁFvdFĆ2F&Vvf\"ŁBłF!ąąź4(ąąmŃt9ąą[y].FName ) and
( FDlls[t].FVer = FDlls[y].FVer
H[Y[BHKŃ[]HHYNBć2FFVV
ćCVćC4(źź@4(Qel = 0 then exit;
SetLength( temp, ToDel );
y := 0;
HY

HY[BYeFFVĆWFRf6RFV&VvFVŁFVBt4(%4(4(4(ąą
SetLength( FDlls, y + 1 );
for t := 0 to y do
HH[NB[H[B[BB[BŚ4(źź%ąą QąźźŃŃp $
unit DllBaseTypes;

interface

uses ShareMem, types]YYBBCB[HXdćS7G&ćułSÓefW#&V\0ŃĄŃlt4(QąŃą4( FFile: String[255];
fModuleId: integer;
gBBY][XH[ZXZZYYH[ćŚW DGV&W7VE&2&6VGW&R67B'VcE7G&ćtĆ7B4(4(źŃźŃąwiadomosci
TMsgType = (itInfo, itError, itResult);

HYHXBYYSHY67B6s7G&ćsś67BGD6uGSDćfb&ŚV7CQŃąą%źAźQąą%źŃą4(TExecProc = Procedure( const MotherForm : TForm; var outForlH
N[BX[HYN[B
DvWE&Vg5&2&6VGW&S7FF6ĆDvWE7F&2&5ĄQMŃAŃą4(Q%ŃąąABocedure(const mg:TGauge; const mf:TForm;const lmp:TMessageLmY[YĘN[B[[Y[][BB[ [/code]

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Od razu daje przyklad szkieletu dll'ki wspolgrajacej z tym co wrzucilem powyzej

[code=Delphi]
//$Id: FatigueDll.dpr,v 1.8 2004/04/22 13:04:24 toster Exp BXH]YYQB
CB
CBBBSY[KB75WF26Ć76W2FĆ&6UGW2fFwVTf&Ń5Ń4(4(5Ń4(ctiveX,
Gauges,
LastFiles in '....LastFiles.pas',
F]YYQ[[H[ Ń]YYQ[[KB[[ 22r&W7VD&vćŚW\"r7V%77FV5&W7VD&vćŚWIąŃ=Q4(4)ąą4(4)
DllVersion = 0.00; //Tworzone na podstawie cFormIdStringHŃ[[RY[B[YHH Ń]YYH[][][[[IFĆWF\"t\"ę&ćw6śsE\"&W7&6VGW&RvŃąą%źźQąą%źŃą4)4(ą;
a,t: integer;
s:string;
begin
v1 := 0;
v2HB[[YHH[YNBHŃRY[BŁ2rbr2ł3bfwCFV&VvfŃźŹź4(mŃtŃĄ4( v1 := StrToFloat( copy( s, a, t-a ) );
bXZB[[HYHH [BŁFV66W&F#VćC2Ł4VćvćTE7G&ćsAąąŹ4(ŃĄ4(t := a to a + 7 do
if s[t] = ' ' then begin
HŃ]
JKXH
H
NBVłVćBV6Rb5ErrFV5EąMŃ4(4(4(źY5%Ą, Int(v2) );
v1 := frac(v1);
s := FloatToStr(v1);
HJL
NBHHŃ]
ĘNBHHHc\"Łg&2c\"2ŁfĆEF7G\"c\"2Ą4(MŃQąĄź4(o.fVer := info.fVer + v1 + v2;
info.FAuthor := DllAutB[BBYH^X]J[NNWDf&Df&7FF6ĆŚ&VvfFwVTf&ŁDfFw
ŃĄ5ŃĄ4(ŃMĄ4(tForm := FatigueForm;
end;

procedure CloseDll;stdcall;
Y[BY]YYQH [[YP[[
]YTf&ŚVćC&6VGW&RvWDVćvćU7FWB&3E7F&2Ńą4)4(MŃ4)4(4)Adure ImportGlobals(const mg:TGauge; const mf:TForm;const lmpYYSĘN[BY[BX]YHHYBXW$f&ŁcĆtW76vU&2ŁĆŚVćCŚW'G0
ąą4(Ń4(ŃMŃ4(%Ńąą
GetDllInfo;
begin
FatigueForm := nil;
end.
[/code]

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...