Results 1 to 9 of 9

Thread: CPas - C for Delphi

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1

    CPas - C for Delphi





    Overview


    What if you were able to load and use C99 sources directly from Delphi? There is a vast quantity of C libraries out there and being able to take advantage of them, without being a pain would be nice. You could even compile a bunch of sources and save them as a library file, then load them back in from disk, a resource or even from a stream. You can get the symbols, map to a C routine, and execute from the Delphi side all from a simple API.

    Downloads


    Releases - These are the official release versions.

    Features



    • Free for commercial use. See License agreement.
    • Allow C integration with Delphi at run-time.
    • Support Windows 64-bit platform.
    • Support for C99.
    • Fast run-time compilation.
    • Can run C sources directly or compile them to a library file (.LIB).
    • Library files can be loaded and used at run-time from a file, a resource or stream.
    • Import symbols directly from a dynamic linked library (.DLL) or module-definition (.DEF) file.
    • You can reference the symbols from Delphi and directly access their value (mapping to a routine and data).
    • Your application can dynamically or statically link to CPas.
    • Direct access to the vast quantity of C99 libraries inside Delphi.


    Minimum System Requirements


    • Delphi 10
    • Microsoft Windows 10, 64 bits
    • 10MB of free hard drive space


    How to use in Delphi


    • Unzip the archive to a desired location.
    • Add installdir\sources, folder to Delphi's library path so the CPas source files can be found for any project or for a specific project add to its search path.
    • Add installdir\bin, folder to Windows path so that CPas.dll file can be found for any project or place beside project executable.
    • See examples in installdir\examples for more information about usage.
    • You must include CPas.dll in your project distribution when dynamically linked to CPas. See CPAS_STATIC define in the CPas unit file.
    • See installdir\docs for documentation.

    NOTE: For your assurance and peace of mind, all official executables in the CPas distro that were created by us are code signed by tinyBigGAMES LLC.

    A Tour of CPas


    CPas API

    You access the easy-to-use API in Delphi from the CPas unit.

    Code:
    {.$DEFINE CPAS_STATIC} //<-- define for static distribution
    
    type
      { TCPas }
      TCPas = type Pointer;
    
      { TCPasOutput }
      TCPasOutput = (cpMemory, cpLib);
    
      { TCPasErrorMessageEvent }
      TCPasErrorEvent = procedure(aSender: Pointer; const aMsg: WideString);
    
    { Misc }
    function cpVersion: WideString;
    
    { State management }
    function  cpNew: TCPas;
    procedure cpFree(var aCPas: TCPas);
    procedure cpReset(aCPas: TCPas);
    
    { Error handling }
    procedure cpSetErrorHandler(aCPas: TCPas; aSender: Pointer; aHandler: TCPasErrorEvent);
    procedure cpGetErrorHandler(aCPas: TCPas; var aSender: Pointer; var aHandler: TCPasErrorEvent);
    
    { Preprocessing }
    procedure cpDefineSymbol(aCPas: TCPas; const aName: WideString; const aValue: WideString);
    procedure cpUndefineSymbol(aCPas: TCPas; const aName: WideString);
    function  cpAddIncludePath(aCPas: TCPas; const aPath: WideString): Boolean;
    function  cpAddLibraryPath(aCPas: TCPas; const aPath: WideString): Boolean;
    
    { Compiling }
    procedure cpSetOuput(aCPas: TCPas; aOutput: TCPasOutput);
    function  cpAddFile(aCPas: TCPas; const aFilename: WideString): Boolean;
    function  cpCompileString(aCPas: TCPas; const aBuffer: string): Boolean;
    procedure cpAddSymbol(aCPas: TCPas; const aName: WideString; aValue: Pointer);
    function  cpLoadLibFromFile(aCPas: TCPas; const aFilename: WideString): Boolean;
    function  cpLoadLibFromResource(aCPas: TCPas; const aResName: WideString): Boolean;
    function  cpLoadLibFromStream(aCPas: TCPas; aStream: TStream): Boolean;
    function  cpSaveLibToFile(aCPas: TCPas; const aFilename: WideString): Boolean; 
    function  cpLink(aCPas: TCPas): Boolean;
    function  cpRun(aCPas: TCPas): Boolean;
    function  cpGetSymbol(aCPas: TCPas; const aName: WideString): Pointer;
    
    { Stats }
    procedure cpStartStats(aCPas: TCPas);
    function  cpEndStats(aCPas: TCPas; aShow: Boolean): WideString;
    If you want CPas to be statically bound to your application, enable the {$CPAS_STATIC} define in the CPas unit.

    How to use


    A minimal implementation example:
    Code:
    uses
      System.SysUtils,
      CPas;
    
    var
      c: TCPas;
      
    // CPas error handler
    procedure ErrorHandler(aSender: Pointer; const aMsg: WideString);
    begin
      WriteLn(aMsg);
    end;  
      
    begin
      // create a CPas instance
      c := cpNew;
      try
        // setup the error handler
        cpSetErrorHandler(c, nil, ErrorHandler);
        
        // add source file
        cpAddFile(cp, 'test1.c');
    
        // link and call main
        cpRun(cp);
      finally
        // destroy CPas instance
        cpFree(c);
      end;
    end.
    See the examples for more information on usage.

    Media




    Support


    Sponsor


    If this project has been useful to you, please consider sponsoring to help with its continued development. Thank You!




    ❤ Made in Delphi
    Last edited by drezgames; 08-03-2022 at 08:33 PM.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •