This Slovak post was published on April 06, 2007. It contains 457 words and should take no more than 3 minutes to read.
You can also read the previous post, or view the list of all posts, or continue to the next post.

Turbo Delphi a jazyk C

Vyvíjate aplikácie v Turbo Delphi? Stalo sa vám už, že ste chceli v niektorej z nich použiť knižnicu, ktorá poskytovala rozhranie iba pre jazyk C? Hľadali ste na internete prepis hlavičkových súborov tejto knižnice použiteľný v Delphi, no vaša snaha bola márna? Ak ste aspoň na dve z predchádzajúcich otázok odpovedali kladne, je tento článok určený práve pre vás. Predstavuje spôsob, ako napísať časť programu v jazyku C a použiť ju v Delphi.

Úvod

Jednou z hlavných úloh tohto článku je názorne predviesť, ako v prostredí Microsoft Visual Studio 2005 Professional vytvoriť dynamicky linkovanú knižnicu (DLL súbor), ktorá exportuje funkcie obsahujúce potrebný kód napísaný v jazyku C a ako ju následne pripojiť k projektu vyvíjanému v Turbo Delphi.

Vytvorenie DLL knižnice vo Visual C++

Vo Visual Studiu zvoľte možnosť založiť nový projekt pomocou menu “File > New > Project”.

V okne “Project Types” vyberte voľbu “Visual C++ > Win32 > Win32 Console Application” a zvoľte názov projektu DLLtest.

Screenshot

V nasledujúcom okne s názvom “Win32 Application Wizard” zvoľte “Application Type: DLL” a “Additional options: Export symbols”.

Screenshot

Visual Studio vygeneruje súbor DLLtest.cpp, v ktorom sa nachádza ukážková funkcia fnDLLtest:

DLLTEST_API int fnDLLtest(void)
{
  return 42;
}

Dopíšte pod ňu vlastnú funkciu fnDLLtext pracujúcu s reťazcami:

DLLTEST_API char * fnDLLtext(char * retazec)
{
  return retazec;
}

Screenshot

V paneli “Solution Explorer” kliknite pravým tlačidlom myši na váš projekt a z kontextového menu vyberte voľbu “Add > New item”.

Screenshot

V okne “Add New Item - DLLtest” vyberte voľbu “Visual C++ > Code > Module-Definition File (.def)” a ako názov nového súboru zadajte DLLtest.

Screenshot

Upravte čerstvo pridaný súbor DLLtest.def tak, aby obsahoval mená exportovaných funkcií:

LIBRARY "DLLtest"
EXPORTS
fnDLLtest
fnDLLtext

Screenshot

Výberom z rolovacieho menu “Solution Configurations” na paneli “Standard toolbar” zmeňte profil z “Debug” na “Release” a skompilujte knižnicu pomocou menu “BUILD > Build solution”.

Screenshot

V adresári projektu by sa mal nachádzať podadresár release obsahujúci výslednú knižnicu DLLtest.dll.

Volanie funkcií z DLL v Borland Delphi

Prekopírujte knižnicu DLLtest.dll priamo do adresára vášho delphi projektu.

Za deklaráciou funkcií z knižnice použite klauzuly cdeclexternal.

Nasledujúci jednoduchý program demonštruje použitie funkcií exportovaných DLL knižnicou vytvorenou podľa tohto článku:

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

function fnDLLtest() : integer; cdecl; external 'DLLtest.dll';
function fnDLLtext(retazec : pchar) : pchar; cdecl; external 'DLLtest.dll';

begin

writeln('Vystup funkcie vracajucej integer: ' + IntToStr( fnDLLtest() ));
writeln('Vystup funkcie vracajucej "string": ' + fnDLLtext( Pchar('ahoj') ));
readln;

end.

Záver

Za nevýhodu tohto riešenia sa dá označiť fakt, že spolu s finálnou verziou vašej aplikácie musíte distribuovať aj balík Microsoft Visual C++ 2005 Redistributable Package, bez ktorého bude vytvorená DLL knižnica nepoužiteľná. Ak teda máte dostatok času a skúseností, môže byť vhodnejším riešením prepísať hlavičkové súbory spomínanej knižnice z jazyka C do jazyka Object Pascal, alebo celú aplikáciu vyvíjať v Turbo C++.

You can also read the previous post, or view the list of all posts, or continue to the next post.

License: Unless otherwise stated, all content on this website is licensed under CC BY 4.0.
Contact: Feel free to drop me an e-mail to jimrich@jimrich.sk if you have any questions or comments.
Disclaimer: The views expressed on this website are my own and do not reflect the views of my employer or any organizations with which I am or have been associated.
Technology: This website is maintained in its own Git repository and brought to life by the Hugo static site generator.
Legalities: This website does not use cookies.