Vlastnosti práce s rozhraními v Delphi. Doporučení pro vytváření uživatelských rozhraní v Delphi ve stejné vzdálenosti mezi řídicími prvky

Jedná se o článek založený na otázkách na fórech: "Jak mohu vrátit linku z DLL?", "Jak přenášet a vrátit řadu záznamů?", "Jak přenést do formuláře DLL?".

Abychom nevrátili polovinu života, abyste zjistili - v tomto článku přivedu všechno na scenérii.

Témata tohoto článku v různých stupních opakovaně ovlivnila tento blog, ale v tomto článku jsou shromažďovány ve svazku, jsou dány odůvodnění. Stručně řečeno, odkaz na tento článek může být hozen v těch, kteří vyvíjí DLL.

Důležitá poznámka: Článek je třeba číst sekvence. Příklady kódu jsou uvedeny pouze jako příkladyV každém kroku (odstavce) článku se kód příkladů přidává s novými údaji. Například na samém počátku článku neexistuje žádná manipulace s chybami, "klasické" metody (např. Používání getlastterror, dohody sdtcall atd.), Který v průběhu článku jsou nahrazeny pomocí adekvátnější. Vyrobeno tak z toho důvodu, že "nový" design ("neobvyklé") vzory nezpůsobily otázky. Jinak, když jsem musel vložit poznámku druhu do každého příkladu: "To je diskutováno v tomto bodě níže, ale co je to. V každém případě, na konci článku existuje odkaz na hotový kód, napsaný v celku, co bylo řečeno v článku. Můžete to vzít a použít. A článek vysvětluje, proč a proč. Pokud se nezajímáte o "proč a proč", leží na konci závěru a odkaz ke stažení příkladu.

Objektově orientovaný programování (OOP), kromě pojmu třídy, také zajišťuje základní pojetí rozhraní.

Jaké je rozhraní a jaké jsou vlastnosti práce s ním v jazyce programování Delphi.?

Rozhraní je sémantický a syntaktický design v kódu programu, který slouží k určení služeb poskytovaných třídou nebo součástí (Wikipedia).

V podstatě rozhraní určuje seznam vlastností a metod, které mají být použity při práci s třídou, kterou toto rozhraní implementuje, stejně jako jejich podpis (název datový typ, přijaté parametry (pro postupy a funkce) atd.). Třída, která implementuje jeden nebo jiné rozhraní, musí nutně implementovat všechny své komponenty. Co je v přísném souladu s tím, jak jsou popsány v něm.

Velmi často se rozhraní porovnávají s abstraktními třídami, ale se všemi podobností není toto srovnání zcela správné. V abstraktních třídách, přinejmenším správu viditelnosti členů. Současně nejsou definována rozhraní oblasti viditelnosti.

Rozhraní umožňují architekturu flexibilnější, protože sjednotíte přístup k jedné nebo jiné funkčnosti, a také se vyhnout řadě problémů spojených s dědictvím ve třídě (rozhraní mohou být také zděděny od sebe).

Chcete-li deklarovat rozhraní v Delphi, slouží klíčové slovo rozhraní. To je stejné, je to nejlepší klíčové slovo, které definuje sekci modulu, na kterou je možné kontaktovat venku (mezi klíčová slova interní a iramplementace). Když je však prohlášeno rozhraní, používá se jiná syntaxe, podobně jako klasifikované třídy.

Delphi / Pascal.

ImyNewInterface \u003d procedura rozhraní interfactionproc; konec;

IMYNEWINTERFACE \u003d Rozhraní.

postup InterfactionProc;

konec;

Syntaxe prohlášení o rozhraní sama o sobě nemá zásadní rozdíly z jiných programovacích jazyků (funkce Pascal založeného na Pascal se nepočítá). Zároveň má implementaci rozhraní řadu charakteristických rysů.

Skutečnost je, že rozhraní Delphi byla zpočátku zadána na podporu technologie COM. Proto iAnterface rozhraní, které v Delphi je předka pro všechna jiná rozhraní (jakýsi analogu tobject), již obsahuje tři základní metody pro práci s touto technologií: QueryInterface, _Addref, _Release. V důsledku toho, pokud třída implementuje jakékoli rozhraní, musí být implementován tak, aby tyto metody implementovaly. I když tato třída není určena pro práci com.

Vzhledem k této funkci rozhraní IInterface v Delphi, používání rozhraní ve většině případů vede k přidání nepoužívaných schopností do třídy.

K dispozici je třída knihovny TinterfaceObject, který již obsahuje implementaci těchto metod a při jejich dědičnosti je třeba je implementovat nezávisle zmizí. Ale protože Delphi nepodporuje více dědičnosti tříd, jeho použití často způsobuje další potíže při navrhování a implementaci požadovaného funkčního provozu.

To vše vedlo k tomu, že i přes všechny možnosti poskytované rozhraními, jejich praktická aplikace v Delphi téměř nepřekročila práci s COM.

Být optimalizován pro práci především s touto technologií, rozhraními a přesněji přidávanou funkčností a architektonickými omezeními při řešení jiných úkolů, neodůvodňujte se.

Proto mnoho programátorů Delphi je stále ve skutečnosti bez výkonného a flexibilního nástroje pro vývoj aplikační architektury.

Jeden a většina silné strany Programovací prostředí Delphi je jeho otevřená architektura, díky které Delphi umožňuje určitý druh metaprogramování, což vám umožní programovat programovací prostředí. Tento přístup překládá Delphi pro kvalitativně nová úroveň Systémy vývoje aplikací a umožňuje vložit další instrumentální nástroje tomuto produktu, které podporují téměř všechny fáze vytváření aplikací. Taková široká škála funkcí se otevírá konceptem tzv. Otevřených rozhraní implementovaných v Delphi, která jsou spojením mezi IDE (integrovaným vývojovým prostředím) a externím nástrojem.

Tento článek je věnován otevřeným rozhraním Delphi a je přehledem jejich schopností. Delphi definuje šest otevřených rozhraní: rozhraní nástroje, rozhraní pro design, expertní rozhraní, rozhraní souboru, úpravy rozhraní rozhraní a řízení verzí. Je nepravděpodobné, že v rámci tohoto článku bychom se podařilo zdůraznit podrobně a ilustrovat možnosti každého z nich. Důkladněji pochopit dotyčné otázky, zdrojové texty Delphi vám pomohou, přínos developerů jim poskytlo nasazené komentáře. Oznámení tříd reprezentujících otevřená rozhraní jsou obsažena v odpovídajících modulech v adresáři ... Delphi Zdroje nástrojůAsapi. Designové rozhraní (DSGNTF.PAS modul) poskytuje nástroje pro vytváření editorů vlastností a editory komponent.

Editory a komponenty nemovitostí jsou tématem hodným odděleným konverzací, takže vám připomínáme, že editor nemovitosti řídí chování inspektora objektů při pokusu o změnu hodnoty odpovídající vlastnosti a editor komponent je aktivován, když dvojitý stisknutý Levým tlačítkem myši na obrázku umístěném na formuláři součásti. Rozhraní řízení verze (modul vcsintf.pas) je navržen tak, aby vytvořil řídicí systémy verze. Počínaje verzí 2.0, Delphi podporuje integrovaný systém řízení systému pro Intersolv PVC, takže ve většině případů není třeba rozvíjet svůj vlastní systém. Z tohoto důvodu je také vynecháno přehled o řízení verzí. Rozhraní souborů (FileIntF.PAS modul) Umožňuje přepsat systém pracovního souboru IDE, který umožňuje vybrat vlastní metodu úložiště souborů (například v poli Memo na databázovém serveru). Úpravy rozhraní (editintf.pas modul) poskytuje přístup ke zdrojovému zdroji zdrojové vyrovnávací paměti, která umožňuje analyzovat kód a spustit jej, určit a změnit pozici kurzoru v okně Editor kódů, jakož i spravovat syntaktický výběr zdrojového textu .

Speciální třídy poskytují rozhraní pro komponenty umístěné ve formuláři (určení typu komponenty, přijímání odkazů na rodiče a dětské komponenty, přístup k vlastnostem, expedici zaostření, odstranění atd.), TO MOŽNOSTI A PROJEKTU PROJEKTU. Upravit rozhraní Umožňuje identifikovat tzv. Modulární images, které určují reakci na události, jako je změna zdrojového textu modulu, modifikující formulář, přejmenovat komponentu, ukládání, přejmenování nebo vyjmutí modulu, změna souboru projektu zdrojů atd. . Rozhraní nástroje (modul Toolintf. PAS) poskytuje vývojářům nástroje pro získání obecných informací o stavu IDE a provádět taková akce, jako je otevření, ukládání a zavírání projektů a jednotlivé soubory, vytvoření modulu, přijímání informací o aktuálním projektu (počet modulů a formulářů, jejich jména atd.), Registrace souborový systém, organizace rozhraní jednotlivých modulů atd. Kromě modulárních oznámení o rozhraní nástroje definuje dodatečné netrhanty, které oznamují takové události jako otevírání / zavírání souborů a projektů, stahování a ukládání projektového desktopového souboru, přidat / vyloučit projektové moduly, balíčky instalace / degenerace, kompilace projektu a in Rozdíl z dodatečných knih modulárních notifiérů umožňuje zrušit provedení určitých událostí.

Navíc rozhraní nástroje poskytuje přístup k hlavnímu menu IDE Delphi, což vám umožní vložit další položky. Expertní rozhraní (expertf.pas modul) je základem pro vytváření odborníků - softwarových modulů vložených v IDE pro rozšíření jeho funkčnosti. Jako příklad odborníka můžete přivést do Průvodce databázovým formulářem Delphi, který provede generování formuláře pro prohlížení a změnu obsahu databázové tabulky. Po stanovení třídy expertů je nutné postarat, že Delphi "naučil" o našem expertovi. Chcete-li to provést, musí být zaregistrován voláním procedury registraceLibraryExperta tím, že jej předáte jako instanci expertní třídy. Jako ilustraci vytvoříme jednoduchý Esstandard-styl expert, který při výběru položky nabídky Delphi, která odpovídá, zobrazí zprávu, která je spuštěna. Jak je vidět z výše uvedené tabulky, Esstandard Style se zavazuje překrývat šest metod:

Aby expert byl "povolen", musíte vybrat položku menu komponenty / instalace komponenty, vyberte modul v dialogu procházení, obsahující expert (v našem případě exmpl_01.pas), klepněte na tlačítko OK a po kompilaci DCLUSR30 DPK balíček v hlavním menu, Delphi sekce v sekci HELP by se měl zobrazit jednoduchý expert 1, když vyberete informační zpráva "Standardní expert spuštěn!". Proč Delphi umístí expertní menu v sekci Nápověda, zůstává záhadou. Pokud se vám nelíbí, co se zobrazí položka menu, kde chcete DELPHI, a ne tam, kde chcete, je možná následující volba: Vytvoření experta ve stylu doplňku, který eliminuje automatické vytvoření položky nabídky a přidat ruční menu Položka pomocí nástroje Rozhraní. To vám umožní nastavit umístění nové položky v hlavní menu náhodně.

Chcete-li přidat položku nabídky, třída TitoolServices se používá - základní rozhraní nástroje - a TimeAnMenuintf třídy, Timenuitemintf, implementace rozhraní k hlavnímu menu IDE a jeho položce. Titoolservices třídy Titoolservices instance je vytvořen samotným IDE, když je inicializován. Upozorňujeme, že odpovědnost za vydání rozhraní do hlavního menu Delphi a jejích položek spadá vývojáře. Pokud jde o cestě, funkční zatížení experta je mírně komplikující: při aktivaci položky nabídky, dá certifikát o názvu projektu otevřený v tento moment Ve středu: V tomto příkladu je funkce AddIdidididididideMenuiem držena, která vykonává položku menu do hlavního menu IDE Delphi. Jako parametry je přenášeno do textu nové položky nabídky, jejího identifikátoru, identifikátoru položky, před tím, než je vložena nová položka, lze použít klíčovou prezentaci klíče, které spolu s klávesou CTRL lze rychle použít k rychlému Přístup k nové položce a popisovač událostí odpovídajícímu výběru nové položky. Přidali jsme novou položku menu do sekce Zobrazit před položkou hodinek.

Teď se seznámí s oznamovateli. Definujeme add-in notifer, sledování momentů zavírání / otevírání projektů a opravu pole odpovídajícím způsobem, že ukládá název aktivního projektu (implementace metod, které nepodprudily změny ve srovnání s příkladem TPRed, pro stručnost nižší): na Implementovat oznamovatele, definovali jsme třídu TaddinnNotifier, který je potomkem tiaddinnotifier a zablokoval metodu filenotifikace. IDE zavolá tuto metodu pokaždé, když dojde k události, která je schopna reagovat inzikátoru ad-in (každá taková událost je označena odpovídající konstantou typu tfilentifikace). Funkce Expert ve třídě TaddinNotifier slouží pro zpětná vazba s odborníkem (metoda Taddinnotfier.Filentification). V odborném destruktoru je registrace oznamovatele odstraněn a oznamovatel je zničen. A teď budeme ilustrovat používání modulárních oznamovatelů. Vytvořit add-in expert, který vydává zprávy o každém aktu ukládání souboru projektu (implementace již známých metod stručnosti není uvedeno): V tomto příkladu, doplněk expertní monitoruje události, které splňují otevření / zavírání projektů.

Pokaždé, když je projekt objeven, je zaznamenán modulární oznamovatel odpovídající souboru projektu. Pokud jde o implementaci, modulární působitelé jsou podobní doplňkových knih: definujeme třídu Tmodulenotifier, která je potomkem Timodulotifier a překrývá jeho informační a složené metody. IDE volá metodu oznámení, pokud dojde k určitým událostem souvisejícím s tímto modulem; Uvnitř této metody je stanovena reakce na konkrétní událost. Metoda soupravy se nazývá při změně názvu komponenty ležícího na formuláři modulu. Upozorňujeme, že tuto metodu nepoužíváme, ale musí to zablokovat, jinak při změně názvu komponenty bude zpochybněn abstraktní metodou základní třídy, což vede k nepředvídatelným důsledkům.

Registrace modulárního oznamovatele je poněkud složitější proces ve srovnání s registrací doplňku oznamovatele: Nejprve dostaneme rozhraní modulu (TimoduleInterface) a potom pomocí rozhraní modulu, zaregistrujte oznamovatele. Když je projekt uzavřen, registrace modulárního oznamovatele je odstraněna (znovu pomocí TimoduleInterface) a oznamovatel je zničen. Závěrem se zobrazí, jak můžete definovat polohu kurzoru v okně Editor kódů. Vytvořit odborníka, který při výběru příslušné položky nabídky bude mít zprávu obsahující název aktivního souboru a polohy kurzoru (je implementována pouze pro tento příklad metody): Pro určení polohy kurzoru, Musíme získat následující sekvenci rozhraní: modulární rozhraní (TimoduleInterface); Rozhraní editoru kódů (tieditorInterface); Rozhraní modulu Rozhraní v okně editoru (TIEDITVIEW).

Pokud, když vyberete položku expertního menu, zdrojový soubor je aktivní (* .pas), pak se vydá zpráva obsahující název aktivního souboru a aktuální polohu kurzoru v něm. Pokud aktivní není soubor PAS, zpráva není vydána. Chcete-li získat název aktivního souboru, použijte metodu GetCurrentFile třídy TitoolServices. Na tomto konci zvážení způsobů použití otevřených rozhraní. CD-ROM obsahuje zdrojové texty všech uvedených příkladů. CD-ROM obsahuje také složitější a podrobnější příklad obsahující expert s doplňkem, což umožňuje uživateli záložkám ve zdrojovém textu modulů Delphi. souhrn Instalace a použití expertních záložek je obsaženo v souboru BKMRKS97.htm. V tomto článku jsou v tomto článku zvažována otevřená rozhraní obecně a příklady jejich použití jsou uvedeny. Opět opakujeme: Díky přítomnosti zdrojových textů otevřených rozhraní můžete snadno pochopit podrobnosti o zájmu vás. Doufáme, že rozmanitost příležitostí poskytovaných otevřenou rozhraními, nemáte jeden odvážný a užitečný nápad.

Článek je napsán z hlediska analýzy programů napsaných mladými vývojáři naší skupiny.

Správně nastavte sekvenci spínacích komponent

Mnoho uživatelů, zejména těch, kteří dříve pracovali v DOS, mají zvyk přepínat mezi vstupními poli ne s myší, ale pomocí klávesnice s klávesou Tab. Kromě toho je mnohem rychlejší než zvýraznit každé pole myši. Proto musí být postup pro spínací komponenty vystaven správně. To se týká obou složek v rámci všech kontejnerových komponent (panely, skupinové skupiny, a jsou podobné) a kontejnerové komponenty samotné, pokud existuje několik těch.

Postup pro spínání komponent uvnitř kontejneru je nastaven vlastností TabisLe. První se stává aktivní složkou, ve které je Taborder rovna 0, druhý z 1 atd., Až do všech komponentů jsou přesunuty. Kromě toho má komponenta vlastnost TabStop, která ukazuje, zda se komponenta zobrazí zaostření při přepnutí klávesy Tab. Pokud potřebujete zakázat přepínání na libovolnou komponentu, vložte tabStop \u003d false. V tomto případě může být přepnutí do této komponenty pouze s myší.

Existují případy, kdy uživatelé, kteří se používají k přepnutí na určitý klíč v jednom programu, ve zvyku, nadále jej používají v klidu. Často se to děje s 1C uživateli, kde lze klávesu ENTER použít pro průchod vstupních polí. Dáme jim takovou příležitost v našich programech, pokud se o to zeptají. Nainstalujte vlastnost Keypreview v true a napište handler události OnKeypress:

Postup CFORM1.FormKeady (odesílatel: Togject; Var Key: Char);
začít.
Pokud Ord (klíč) \u003d vk_return
Form1.SelectiveControl, pravda, pravda);
konec;

Takový popisovač poskytuje přechod pomocí položek tvaru, když stisknete klávesu Enter. Je třeba poznamenat, že taková metoda nebude fungovat s tlačítky, protože Stisknutím tlačítka ENTER na tlačítko vede k jeho stisknutí, při stisknutí tlačítka přenáší vstupní zaostření na jeden v komponentě spínací sekvence.

Výchozí tlačítka

Všichni stejní uživatelé rychle si zvyknout na to v dialogovém okně aplikací, může klávesa Enter potvrdit výběr a klíč ESC je zrušen. Nezklamat je v našich programech, zejména proto, že to je velmi jednoduché. Pro zobrazení tlačítka pro vstup do ENTER nastavte výchozí vlastnost v hodnotě TRUE. Pro reakcí ESC nastavte vlastnost Zrušit v platu. A to je vše.

Ano nebo ne

Všechna dialogová okna, vyžádání uživatelských akcí, musí mít alespoň dvě tlačítka: potvrzení akcí a odmítnutí (ano / ne, uložení / zrušení atd.). Odmítnutí akce lze uzavřít oknem [X] v záhlaví okna. Je nepřijatelné, pokud existuje pouze jedno tlačítko pro potvrzení akce, a pro selhání se předpokládá, že zavřete tlačítko [X] v záhlaví, nebo neexistuje žádná možnost odmítnutí. To zaměňuje uživatele, což způsobuje logickou otázku: Jak odmítnout?

Nezapomeňme také na to, co bylo uvedeno výše ve výchozích tlačítkách.

Všechna dialogová okna musí otevřít střed obrazovky.

Ve středu, a ne tam, kde byly vytvořeny v režimu návrhu. Za prvé, to je jasně a za druhé, automaticky eliminuje problém různých rozlišení obrazovky od různých uživatelů.

Výjimka se provádí, pokud dialogové okno není modálně, a výsledky uživatele v tomto okně se v hlavním okně okamžitě vyskytly změny (například filtrování dat dat, redrawing grafy atd.).

Velikost systému Windows by neměla překročit velikost obrazovky

V žádném případě. Tato hanba je, když se část okna dostane za obrazovkou. Tento požadavek nezávisí na rozlišení obrazovky uživatelem, tj. Výmluvy jako "Nechte ji dát více rozlišení" nepřijme.

Správná změna prvků okna

Prvky oken musí správně měnit své rozměry nebo se pohybují, když se změní velikost okna, při maximalizaci okna a při obnově okna po maximalizaci.

Všechno je vždy viditelné

Snížení velikosti okna by neměl vést k zmizení prvků okenního okna a je žádoucí, že by nemělo vést k vzhledu posuvníku (Scrolller) samotného okna. Minimální rozměry okna můžete omezit tak, aby byly všechny položky viditelné a přístupné. Pokud neexistuje možnost umístit komponenty tak, aby každý mohl být viděn v okně, můžete použít záložky (typ PAGECONTROL), abyste rozdělili komponenty do skupin. Omluvy o rozlišení obrazovky buď nenechte si ujít.

Tipy všude, rady vždy

Pro tlačítka, zejména na panelu nástrojů (typ panelu nástrojů), musí být nastaveny výzvy (tip), takže je vždy jasné, proč potřebujete jeden nebo jiný tlačítko.

Barevné spektrum

Ne malovat komponenty na formuláři ve všech barvách duhy. Pneumatika očí a rozptýlí pozornost uživatele. Nevypadá "cool". Výběr barev se používá v případě, kdy musí být pozornost uživatele přitahována k určitému prvku nebo konkrétní části okna. Například malovat světle-červený záznam, ve kterém jsou chyby přítomny nebo naopak světle zelená barva záznamu, jehož kontrola byla úspěšná.

Závěr

Existuje velmi dobrá metoda, která vám umožní najít nedostatky programu obecně a zejména rozhraní. Je to jednoduché: představte si sami sebe na místě uživatele a půl hodiny zkuste pracovat, jak to funguje. Ještě lepší, pokud je váš uživatel v dosahu (například funguje ve stejné organizaci). V tomto případě sedněte vedle něj, a lepší místo něj, a pokusit se to udělat. Chcete-li provést data, změňte je, zobrazí sestavy atd. Pokud nevíte, jak to udělat správně, zeptejte se svého uživatele. Nejsou jedno nebo dva operace s jedním typem, jako v režimu ladění, a 20-30, nebo dokonce různými operacemi, různými způsoby. Zapomeňte na něco zadat nebo zadat nesprávně a zjistěte, jak na něj program odpoví. Rychle se zobrazí slabá místa programu.

Autor článku automatizoval práci přijímacího výboru na univerzitě, av prvním roce realizace programu po dobu 3-4 hodiny denně strávený v přijímací komisi, registrujících žadatele, vyplnění jejich osobních údajů a vydávání zpráv na zkouškách. A ve zbývající pracovní době pevné chyby a nedostatky. Věřte mi, příští rok nejsou prakticky žádné problémy. Podobně to bylo také zavedení personálního modulu.

Vzpomeňte si tedy o pohodlí práce pro uživatele. Nechte být snadné a příjemné pracovat s programy.

Mám problém používat třídu Delphi z C ++ kódu. Delphi DLL DEMO, která exportuje funkci, která vrátí objekt.
Můj Delphi DLL kód vypadá takto:

Knihovna Delphitest; // používá část .... typ IMYObject \u003d procedura rozhraní Dothis (n: celé číslo); Funkce Dothat: Pwidechar; konec; TMYOBJECT \u003d třída (Tinterfacedobject, ImyObject) Postup Dothis (N: Integer); Funkce Dothat: PAR; konec; // TMYObject Implementace Go ... postup TMYObcict.Dotis (N: Integer); Začněte showmessage ("volání Dothis metoda s parametrem" + INTTOSTR (N) + ""); konec; Funkce TMYOBJECT.DOTAT: PAR; Začněte showmessage ("Voláte funkci Dothat"); Výsledek: \u003d PAR ("Ahoj im Dothat"); konec;

// Exportovat funkce DLL:

Funkce CreateyObject: ImyObject; Stdcall; export; Var txt: textfile; Začněte přiřazení (txt, "c: log.log"); Reset (txt); Writeln (txt, "hello"); Výsledek: \u003d TMyObject.Create; konec; Vývoz kreateyObject;

v mém projektu C ++ jsem oznámil rozhraní ImyObject takto:

Třída ImyObject (veřejnost: ImyObject (); virtuální ~ iMyObject (); virtuální prázdno dothis (int n) \u003d 0; virtuální char * dothat () \u003d 0;);

a moje hlavní funkce je následující:

Typedef imyObject * (__stdcall * createfn) (); INT MAIN () (HMODULE HLIB; HLIB \u003d LOADLIBRARY (L "DELPHITEST.DLL"); Assert (Hlib! \u003d Null); // projít! "); pokud (pfncreate \u003d\u003d null) (dord errc \u003d getLastterror (); printf ("% u ", errc); // dostane chybu 127) else (Printf (" úspěšnost n ");) IMYObject * objtr \u003d pfncreate (); objptr-\u003e Dothis (5); freelibrary (hlib); int v; scanf_s ("% i", & in); návrat 0;);

v tomto příkladu jsem dostal chybu v době spuštění, když se pokusím o přístup k exportované funkci. Chyby řádků:
IMyObject * oblitr \u003d pfncreate ();

Můžete mi říct, že ne tak s mým příkladem.
A pokud je to možné, jakýkoliv pracovní příklad je přístup ke třídě Delphi (v DLL) z C ++ kódu.

Rozhodnutí

Prvním problémem je volání metody metod. Rozhraní Delphi. Použití registru, který je konkrétní Delphi Challenge Dohoda. Použití STDCALL, například pro metody rozhraní.

Následující problém v C ++. Vaše rozhraní C ++ by mělo být odvozeno z Iunknown, navíc by neměl deklarovat návrháře nebo destruktor.

Kromě toho je váš kód Delphi exportován Pwidecharem, který se nezobrazuje na char *, zobrazí se na war_t *,

Při pohledu na, vracení par zde funguje skvěle, protože vaše realizace vrací doslova. Ale závažnější kód bude pravděpodobně chtít používat dynamicky umístěný řetězec a v tuto chvíli má váš návrh nevýhody.

Všimněte si, že vytvoříte soubor v kořenovém adresáři systémový disk Je nutné být správcem se zvýšenými právy. Tak to je další potenciální bod odmítnutí.

Očekávám, že existují další chyby, ale to je vše, co jsem zjistil tak daleko.