2013-06-14 15 views
8

Çalışma zamanında Delphi'de bir önceden tanımlanan RemObjects Pascal Komut Dosyası'nı yüklemeye çalışıyorum. Ancak, 'VALUE_TEAMCODE İçe Aktarılamıyor' hariç Delphi'yi yüklemeye çalıştığımda. Value_TeamCode, Delphi uygulamasında Pascal Script'e önceden kaydettiğim bir işlevdir.Önceden derlenmiş komut dosyasını RemObjects Pascal Komut Dosyası'nda (Delphi) yükleme

İşte yaptığım şey. Kaba sözde kod aşağıda - gerçek kod, birden fazla dosyaya bölünür. Ayrıca, komut dosyasının çalıştırılması gerektiğinde, uygulamada SetCompiled numaralı çağrı da daha sonra gerçekleşir. koduyla ilgili

Not: FPascalScript bir TPSScriptDebugger

... 

//Register custom functions with Pascal Script 
FuncsRegister; 

//Load script 
FPascalScript.Script.AddStrings(AContent); 

//Compile script 
FPascalScript.Compile; 

//Get compiled script 
FPascalScript.GetCompiled(sCompiledScript) 

//Try and set script back in - ERROR Here 'Cannot Import VALUE_TEAMCODE' 
FPascalScript.PascalScript.Debugger.SetCompiled(sCompiledScript); 

... 

olduğunu Belki bu yanlış hakkında gidiyorum. Ön derlenmiş bir betik yüklemek bile mümkün olup olmadığından emin değilim.

RemObjects WebSite Wiki'de arama yaptım ancak Pascal Script yardımı silinir. Ayrıca StackOverflow'ta çeşitli konuları aradım ancak hiçbiri bu sorunla ilgili görünmüyor.

Sadece başka bir not. Zaten herhangi bir sorun olmadan çalışma zamanında derleme ve yürütme komutlarım var. Performans nedenlerinden dolayı önceden derlemem gerekiyor.

Herhangi bir yardım için teşekkür ederiz.

Güncelleme: etrafında

Güncel eser benim sistemde komut başına bir komut motoru sahip olmaktır. Bu motorlar daha sonra ön derlemeden sonra bellekte kalırlar. Bu, aksi halde sahip olduğum komut dosyası derleme başına 30ms kaldırır. Ayrıca biraz daha fazla bellek kullanır, ancak bir endişe için yeterli değildir.

Hala oldukça olsa sadece bir komut dosyası motorunu kullanmak. Aksine bunun how daha

+0

Viki/belgelerin silindiğinden emin misiniz? 'RemObjects Pascal Script Documentation' için bir google araması beni [yararlı görünümlü bir sayfaya] götürdü (https://github.com/remobjects/pascalscript/wiki). –

+0

Evet Bunları okurum. Unfortunatley, senaryonun nasıl işlediğini ve sınıfları, yöntemleri nasıl kaydedeceklerini anlatıyorlar. Şimdiye kadar bir işim var - temel olarak, ön derlemeden sonra bellekte kalan komut dosyası başına bir komut dosyası. –

+0

Sadece dışarı veya merakı .. DWS üzerinden RO pascalscript'i seçtiniz? Tavsiye eder misin? –

cevap

1

RemObject Connect beta forumuna olan bir yanıt sayesinde bir çözüm buldum. (Bakınız için bkz. http://connect.remobjects.com/discussion/comment/13540#Comment_13540)

Teşekkürler poster vovanl.

şöyle ben OnExecImport olayı aracılığıyla benim fonksiyonları ithal etmek zorunda:

... 

FPascalScript.OnExecImport := OnExecImport; 
FPascalScript.SetCompiled(sCompiledScript); 

... 

TMyClass.OnExecImport(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter); 
begin 
    se.RegisterDelphiFunction(@Value_TeamCode, 'Value_TeamCode', cdRegister); 
end; 

... 

O SetCompiled görünür mevcut tüm kayıtları siler ve böylece fonksiyonlar, prosedürler, yöntemler vb yeniden kayıt OnExecImport kanca GEREKİR

Ön derlenmiş bir betik yüklenirken (yani bir komut dosyasını bir başkası için değiştirerek) ek süre ek yük eklendiğine dikkat edin. İlk çalışmamın yaklaşık 6 kat daha hızlı olduğunu buldum.

0

(Dolayısıyla gerek önceden derlenmiş komut dosyası yüklemek için), nedenini ile karşı gidiyorum?

Derlenmiş komut dosyaları, büyük olasılıkla platform/hedefe bağlı olsa bile büyük olasılıkla sürüm bağlanır - ve genellikle, zaman isabetini hiç görmediğiniz kadar hızlı bir şekilde derlerler. Komut dosyalarını, zamanı derlemek için yeterince yoğun kullanıyor musunuz?

Bazen en iyi cevap "Bunu gerçekten yapman gerekiyor mu?"

+0

eğer bir web sunucusunda kullanıyorsa ve derlenmiş betiğin yüklenmesi ayrıştırma + derleme işleminden daha hızlıysa, 5 ms sonra IMO kazanmış olsa bile bu bir zorunluluktur. – ComputerSaysNo

+0

Bu bir cevap değil. Orijinal soruya bir (iyi) yorumu var, ama burada sorulan soruya cevap verecek hiçbir şey yapmıyor. –

+0

Neden perfomance nedenleri içindir. Benim uygulama zaman kritik ve herhangi bir ek yükü klişe ekler. İhtiyaç anında derleme 30 ms sürer. Derlenmiş 20 tuhaf yazım var. Bu 600ms alır. Şu anda bir çalışmam var - temel olarak ön derlemeden sonra bellekte kalan komut dosyası başına bir komut dosyası. Bu şekilde senaryo yüklemem gerekmiyor. Daha fazla bellek kullanır ancak endişe etmek için yeterli değildir. Yine de sadece bir script motoru kullanmayı tercih ederim. –

İlgili konular