Jump to content

IDE priekš delphi


Mezavecis
 Share

Recommended Posts

Ir vajadzība uztaisīt mazu aplikāciju ar Delphi, kas būtu kā strādājošas komponentes piemērs citas kompānijas produktam.

 

Tā kā Delphi kodēju praktiski pirmoreiz, ja neskaita Pascal pirms 100 gadiem, līdz ar to jautājums, kura būtu jēdzīga.

 

Nokačāju pēdējo  RAD Studio 10.1, it kā viss skaisti, bet tur ir daži gļuki, kas liedz izmantošanu:

- neredz izmaiņas COM komponentē, lai arī VBA, .NET un Delphi 7 jaunas funkcijas ir pieejamas.

- nevar ieinstalēt uz Win 2008 R2.

 

Ir kaut kāda IDE, kas nedaudz svaigāka par Delphi 7, jo Intellisense tur ir reti arhaisks, un kurai nav problēma ar svaigāku OS savietojamību?

 

Nokačāju XE8, bet nav iespējams seriālo numuru dabūt.

 

 

 

 

 

 

 

Link to comment
Share on other sites

Te ir kaudze ar delphi versijām ar visiem aktivizatoriem.

 

http://rutracker.org/forum/tracker.php?f=1055&nm=delphi

 

Bet īsti nav skaidrs ko vajag uztaisīt? Delphi aplikāciju kas com objektu izmanto?

Cik zinu - ja com objekts mainās, tad viņš par jaunu iekš delphi jāreģistrē jo reģistrējot tiek pas fails ar visām metodēm ģenerēts, ko tad arī IDE izmanto lai teiktu priekšā metodes un propertijas. 


Par serveri nezinu - nekad nav mēģināts delphi uz servera laist.

Link to comment
Share on other sites

Tā kā Delphi .NET nesaprot (ir kaudze topiku, ka teorētiski strādā, bet praktiski ne), tāpēc COM tiek izmantots. COM var izsaukt arī dinamiski izmantojot ProgID, jo uzģenerētais kods ir diezgan komplicēts un grūti izmantojams.  

 

Vajag uztaisīt progu, kurā ir dažas podziņas un lauciņi, lai var notestēt piegādātā DLL funkcionalitāti ar Delphi līdzekļiem.

Link to comment
Share on other sites

RAD ir par velti 30 dienas, kas šajā gadījumā man arī pietiktu. 

 

Pirātisku softu nevaru likt uz darba datoriem.

Link to comment
Share on other sites

Nu tad jāpērk, ko es citu varu ieteikt... Pieņemu ka demo versijā ir kādi ierobežojumi.

 

Bet tāpat nesaprotu kur ir problēma!

 

 

. COM var izsaukt arī dinamiski izmantojot ProgID
- jā, var! Kur problēma? Šajā gadījumā com objekts tiks ielasīts dinamiski un kompilators neko nezina par viņa metodēm un propertijām. Var rakstīt ko grib, kompilators visu sagremos, būs kļūdas tikai kad softs tiek palaists. (Izmantojam funkciju CreateComObject)

 

Vēl ir veids, kad com objekts tiek reģistrēts iekš delphi IDE. Tad tiek pas fails ar com objekta metožu aprakstu izveidots. Tad IDE zina kādas ir metodes, propertijas, code completion strādā, kompilators lamājas, ja kas nav pareizi. Bet tad protams ka pas fails nemainās, ja mainās com objekts, tāpēc pēc com objekta izmaiņām viņš par jaunu iekš DELPHI ide jāreģistrē lai par jaunu pas failu uztaisa. 

Piemērs ar interfeisa reģistrēšanu iekš delphi

http://rvelthuis.de/articles/articles-cppobjs.html 

Link to comment
Share on other sites

Problēma ir tāda, ka tas RAD 10.1 pat to dinamisko nespēj nolasīt. Tu uztaisi jaunu metodi, piereģistrē DLL un kompilēts kods neatrod izmaiņas. Es jau veselu dienu nobakstījos, kamēr sapratu, ka problēma ir IDE kompilatorā nevis COM objektā. Man vairāk  nav laika meklēt alternatīvus apvedceļus.
 
Arī to mēģināju, bet importētais rezultāts ir 4 interfeisi. Ņemot vērā Delphi zināšanas, neesmu izkodis, kā uztaisīt instanci un izsaukt metodi, jo metodes satur IMyController. 

 - _MyController = interface(IDispatch)
 - _MyControllerDisp = dispinterface
 -  IMyController = dispinterface
 -  CoMyController = class
    class function Create: _MyController;
    class function CreateRemote(const MachineName: string): _MyController;
  end;

 
 
 

Vēl ir veids, kad com objekts tiek reģistrēts iekš delphi IDE.

Link to comment
Share on other sites

Šo un līdzīgus rakstus esmu lasījis. Ar create izveido IDispatch objektu, kuram nav metodes, kā Invoke utml. Nevaru atrast nevienu piemēru, kā šai instancei piekabināt klases interfeisa metodes. 
 
C# bibliotēka ir šādi definēta:
 
 

  [Guid("DBE1F0F2-EAC8-4F41-AEFF-AC7135333A4D")]
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyController
    {
    }


 [ProgId("My.Controller")]    
    [ComVisible(true)]        
    [ComSourceInterfaces(typeof(IMyController))]
    public class MyController : IMyController
    {
}

Toties šāds kods lieliski strādā Delphi7, bet jaunajā XE10 gļuko. Tikai neerti ar tiem variant, jo var viegli nokļūdīties tipos, nosaukumos utml.
 

var
   my:Variant;
begin
   my:= CreateOleObject('My.Controller');
   Edit1.Text:=my.TestFunction(0);
end;
Labots - Mezavecis
Link to comment
Share on other sites

  • 2 weeks later...

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...