CAM API
  • CAM API
v3.0.3
Search Results for

    Show / Hide Table of Contents

    Delphi support in CAMAPI

    Support export function

    You native DLL should have export function, which will be entry point:

    function CreateInstanceOfExtension(PluginID: WideString): NativeUInt;
    begin
        // create instance of your class
        var res: IExtension;
        if SameText(PluginID, TExtensionUtilCommonDll.GetIdent()) then
            res := TExtensionUtilCommonDll.Create() as IExtension
    
        else
            raise Exception.Create('Unknown ID ' + PluginID);
    
        // modify as pointer
        res._AddRef;
        result := NativeUInt(res);
    end;
    

    Its logic can be more complex, but it is important that the result of the function is a pointer with an incremented reference count.

    Connecting the SDK

    The SDK is stored as package EncySoftware.CAMAPI.SDK.bpl.x64 on nuget.org. In the BuildSystem, you can configure it to download and extract this package to a specific directory before compilation. Then, this directory needs to be connected in the Delphi project settings.

    In build.cs:

    • Add in list of ManagerProps:
    new RestorerNugetProps
    {
        Name = "RestorerNuget",
        DepsProp = new List<RestorerDepProp>
        {
            new()
            {
                PackageId = "EncySoftware.CAMAPI.SDK.bpl.x64",
                Version = "1.1.0", 
                OutDir = Path.Combine(RootDirectory.Parent, "SDK")
            }
        }
    }
    
    • Specify accordance:
    settings.ManagerNames.Add("restorer", "Debug", "RestorerNuget");
    settings.ManagerNames.Add("restorer", "Release", "RestorerNuget");
    
    • Add restore before compile in target:
    private Target Compile => _ => _
        .Executes(() =>
        {
            _buildSpace.Projects.Restore(Variant);
            _buildSpace.Projects.Compile(Variant, true);
        });
    

    In this way, any other package can be connected - similar to PackageReference in C# projects.

    In this article