Mezavecis Ierakstīts Septembris 20, 2016 Share Ierakstīts Septembris 20, 2016 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 More sharing options...
Ronalds Septembris 20, 2016 Share Septembris 20, 2016 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 More sharing options...
Mezavecis Septembris 20, 2016 Author Share Septembris 20, 2016 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 More sharing options...
Mezavecis Septembris 20, 2016 Author Share Septembris 20, 2016 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 More sharing options...
Ronalds Septembris 20, 2016 Share Septembris 20, 2016 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 More sharing options...
Mezavecis Septembris 20, 2016 Author Share Septembris 20, 2016 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 More sharing options...
Ronalds Septembris 20, 2016 Share Septembris 20, 2016 (labots) Mežaveci, šo linku izlasīji? http://rvelthuis.de/articles/articles-cppobjs.html Vajadzētu izsaukt sekojoši: var c: _MyController; begin c:=CoMyController.create; vai CoMyController.createRemote('pc1'); Un tālāk c.metode1; c.metode2; utt end; Labots Septembris 20, 2016 - ronalds_ Link to comment Share on other sites More sharing options...
Mezavecis Septembris 20, 2016 Author Share Septembris 20, 2016 (labots) Š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 Septembris 20, 2016 - Mezavecis Link to comment Share on other sites More sharing options...
VIL Septembris 21, 2016 Share Septembris 21, 2016 Kas par kļūdu? http://stackoverflow.com/questions/28630556/createoleobject-in-a-64-bit-delphi-program Link to comment Share on other sites More sharing options...
Ronalds Septembris 21, 2016 Share Septembris 21, 2016 Pamēģini CreateComObject funkciju CreateOleObject vietā. Link to comment Share on other sites More sharing options...
VIL Septembris 29, 2016 Share Septembris 29, 2016 Delphi 10.1 starter atkal ir par brīvu https://www.embarcadero.com/app-development-tools-store/delphi Link to comment Share on other sites More sharing options...
Recommended Posts
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 kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!