Korumalı - iyi, çok zayıf - kötü. Ve dll çağırma yeteneği ile ne korunur? smile Yine de dll ve td'yi aramayı yasaklamak kesinlikle mümkün. vb. Yürütülmek üzere bir grup görevi uzmanın dosyalar dizinine atma fikrine sahipken FindFirst ve FindNext'e ihtiyacım vardı, böylece o onları sıralayıp yürüttü. Şekil ortaya çıktı.
_Varsayılan_ olarak, bir DLL'den içe aktarma _totally_disabled_ olur. Bu korumadır. Herhangi biri harici DLL kullanmak isterse, "Her DLL işlevinin çağrısını onayla" düğmesini açmanız ve orada ne çağrıldığına bakmanız yeterlidir. Bu da korumadır. Tüm yerleşik dosya işlemlerini yalnızca /history ve /files dizinlerine erişimle korumanın yanı sıra.
2 mike: aptal soru için üzgünüm. Delphi derlenmiş dll'leri çalıştırılamıyor. Pol da benzer bir sorunla karşılaştı ( "Dizileri ve dizeleri DLL'ye (Delphi) geçirme" ), ancak orada kimse ona yanıt vermedi. Bana nasıl yaptığını söyler misin?
Sorun nedir? İşte çalışan bir dll örneği (ilgili olmayan her şeyi attım):
kütüphane MetaDLL;
kullanır sissutiller, sınıflar, pencereler;
{$R *.res}
{-----Başlat ------------------------------------- ------ ------------} prosedür InitDllData(CurrencyName: PChar); standart çağrı; başlamak // bir şey yap son;
{-----Sonlandırmak------------------------------------- ------ --------------} prosedür FreeDllData; standart çağrı; başlamak // bir şey yap son;
{----İşlem işareti------------------------------------------------ -----------------} prosedür ProcessTick(CurrencyName: PChar; teklif, sor: çift; zaman: tamsayı); standart çağrı; var f:dosya; TarihSaat:TDateTime; başlamak denemek AssignFile(f, WorkDir + Para BirimiAdı + '.tik'); denemek sıfırla(f, 1); dışında yeniden yaz(f, 1); son;
denemek DateTime := MTTimeToNormal(zaman); ara(f, DosyaBoyutu(f)); BlockWrite(f, DateTime, sizeof(DateTime)); BlockWrite(f, teklif, sizeof(teklif)); Sonunda Dosyayı Kapat(f); son; dışında // son; son;
ihracat ProcessTick, InitDllData, FreeDllData;
son.
Tüm işlevlerinizi stdcall olarak ayarlamayı unutmayın, yalnızca standart Windows türlerini (yalnızca PChar olarak dizeler) kullanın, ayrıca dışa aktarılan tüm işlevleri dışa aktarma yönergesinde belirtmeyi unutmayın, mutlu olacaksınız.
Evet, ayrıca Renat'ın ekspertizde dll kullanımına nasıl izin verileceği konusunda yayınladığı resme bakın.
Sorun nedir? İşte çalışan bir dll örneği (ilgili olmayan her şeyi attım):
kütüphane MetaDLL;
kullanır sissutiller, sınıflar, pencereler; ...
Başka bir aptal soru için özür dilerim: Bu DLL'de bir VCL kullanmak mümkün mü (daha doğrusu anladınız mı)? Ve sonra "form" ddl'ye bağlandığımda, MetaTrader başlatıldığında (veya ilgili danışman bağlandığında) bile bir "hata" ile çöküyor. Aslında sadece TDatabase, TDataSource, TQuery ile ilgileniyorum
2 mikrofon Öykünücünüzle çok ilgilendim, tarih üzerinde pratik yapabileceğiniz bir şey. Maalesef bildiğim kadarıyla MT bunu yapmayacak. Anladığım kadarıyla Forex'te iyi para kazandığınız için gerçekten satmak istemiyorsunuz. Ancak internette uzun süredir benzer bir şey arıyordum, şimdiye kadar başarılı olamadım. Geliştirmenizi kullanmama izin verirseniz sevinirim. Benim açımdan size MTS'yi önerebilirim, belki de ilginizi çekebilecek tek şey bu. İşbirliğini umuyorum, Alexander. f1-forum@mail.ru
Sadece ayarlara bakın - her şey devre dışı (DLL'ler varsayılan olarak devre dışıdır):
Herhangi biri harici DLL kullanmak isterse, "Her DLL işlevinin çağrısını onayla" düğmesini açmanız ve orada ne çağrıldığına bakmanız yeterlidir. Bu da korumadır. Tüm yerleşik dosya işlemlerini yalnızca /history ve /files dizinlerine erişimle korumanın yanı sıra.
kütüphane MetaDLL;
kullanır
sissutiller,
sınıflar,
pencereler;
{$R *.res}
{-----Başlat ------------------------------------- ------ ------------}
prosedür InitDllData(CurrencyName: PChar); standart çağrı;
başlamak
// bir şey yap
son;
{-----Sonlandırmak------------------------------------- ------ --------------}
prosedür FreeDllData; standart çağrı;
başlamak
// bir şey yap
son;
{----İşlem işareti------------------------------------------------ -----------------}
prosedür ProcessTick(CurrencyName: PChar; teklif, sor: çift; zaman: tamsayı); standart çağrı;
var
f:dosya;
TarihSaat:TDateTime;
başlamak
denemek
AssignFile(f, WorkDir + Para BirimiAdı + '.tik');
denemek
sıfırla(f, 1);
dışında
yeniden yaz(f, 1);
son;
denemek
DateTime := MTTimeToNormal(zaman);
ara(f, DosyaBoyutu(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, teklif, sizeof(teklif));
Sonunda
Dosyayı Kapat(f);
son;
dışında
//
son;
son;
ihracat
ProcessTick, InitDllData, FreeDllData;
son.
Tüm işlevlerinizi stdcall olarak ayarlamayı unutmayın, yalnızca standart Windows türlerini (yalnızca PChar olarak dizeler) kullanın, ayrıca dışa aktarılan tüm işlevleri dışa aktarma yönergesinde belirtmeyi unutmayın, mutlu olacaksınız.
Evet, ayrıca Renat'ın ekspertizde dll kullanımına nasıl izin verileceği konusunda yayınladığı resme bakın.
#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
void InitDllData(dize Para BirimiAdı);
geçersiz FreeDllData();
ve sonra zaten herhangi bir işlevi çekebilirsiniz
kütüphane MetaDLL;
kullanır
sissutiller,
sınıflar,
pencereler;
...
Başka bir aptal soru için özür dilerim: Bu DLL'de bir VCL kullanmak mümkün mü (daha doğrusu anladınız mı)? Ve sonra "form" ddl'ye bağlandığımda, MetaTrader başlatıldığında (veya ilgili danışman bağlandığında) bile bir "hata" ile çöküyor.
Aslında sadece TDatabase, TDataSource, TQuery ile ilgileniyorum
Öykünücünüzle çok ilgilendim, tarih üzerinde pratik yapabileceğiniz bir şey. Maalesef bildiğim kadarıyla MT bunu yapmayacak. Anladığım kadarıyla Forex'te iyi para kazandığınız için gerçekten satmak istemiyorsunuz. Ancak internette uzun süredir benzer bir şey arıyordum, şimdiye kadar başarılı olamadım. Geliştirmenizi kullanmama izin verirseniz sevinirim. Benim açımdan size MTS'yi önerebilirim, belki de ilginizi çekebilecek tek şey bu.
İşbirliğini umuyorum, Alexander. f1-forum@mail.ru