#ifndef ANSANNHUB_H #define ANSANNHUB_H #define ANSANNHUB_API __declspec(dllexport) #include #include #include "ANSLicense.h" #include //#include "LabVIEWHeader/extcode.h" namespace ANSCENTER { class ANSANNHUB_API ANNHUBAPI { private: std::vector nInput; //ANN inputs std::vector nOutput; //ANN outputs std::vector> IW; std::vector> LW; std::vector Ib; std::vector Lb; // Structural parameters int nInputNodes, nHiddenNodes, nOutputNodes; int hiddenActivation; // default =2 int outputActivation; // default =2 int dataNormalisationModeInput; // default =1; int dataNormalisationModeOutput; // default =1; // Preprocessing and postprocessing settings std::vector xmaxInput, xminInput; // Maximum and minimum of inputs double ymaxInput, yminInput; // Maximum and minimum of inputs std::vector xmaxOutput, xminOutput; // Maximum and minimum of outputs double ymaxOutput, yminOutput; // Maximum and minimum of outputs // Control creation unsigned char isCreated; std::string _licenseKey; bool _licenseValid{ false }; bool _isInitialized{ false }; std::string _modelFilePath; private: void PreProcessing(std::vector& Input); // mode =0--> linear, mode =1 mapminmax, mode =2 standarddev void PostProcessing(std::vector& Output); // mode =0--> linear, mode =1 mapminmax, mode =2 standarddev void Create(int inputNodes, int HiddenNodes, int outputNodes); void FreeNeuralNetwork(); void CheckLicense(); int ImportANNFromFile(std::string filename); public: ANNHUBAPI(); ~ANNHUBAPI() noexcept; [[nodiscard]] bool Init(std::string licenseKey, std::string modelFilePath); [[nodiscard]] std::vector Inference(std::vector ip); void Destroy(); [[nodiscard]] int GetOutputNode() { return nOutputNodes; }; }; } extern "C" __declspec(dllexport) int CreateANNHUBHandle(ANSCENTER::ANNHUBAPI **Handle, const char* licenseKey, const char* modelFilePath); extern "C" __declspec(dllexport) int ReleaseANNHUBHandle(ANSCENTER::ANNHUBAPI **Handle); extern "C" __declspec(dllexport) int ANNHUB_Inference(ANSCENTER::ANNHUBAPI **pHandle, double* inputArray, int inputSize, double** outputArray); extern "C" __declspec(dllexport) int ANNHUB_InferenceLV(ANSCENTER::ANNHUBAPI **pHandle, double* inputArray, int inputSize, LStrHandle outputHandle); // --- V2 entry points: accept handle by value (uint64_t) to avoid LabVIEW buffer reuse bug --- extern "C" __declspec(dllexport) int ANNHUB_Inference_V2(uint64_t handleVal, double* inputArray, int inputSize, double** outputArray); extern "C" __declspec(dllexport) int ANNHUB_InferenceLV_V2(uint64_t handleVal, double* inputArray, int inputSize, LStrHandle outputHandle); #endif