// dllmain.cpp : Defines the entry point for the DLL application. #include "pch.h" #include "ANSLicense.h" #include "Utility.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" __declspec(dllexport) int CreateANSLSHandle(ANSCENTER::ANSLSHelper * *Handle, const char* privateKey, const char* publicKey, const char* licenseServiceURL) { try { if (!Handle || !privateKey || !publicKey || !licenseServiceURL) return 0; std::string st_privateKey = privateKey; std::string st_publicKey = publicKey; std::string st_licenseServiceURL = licenseServiceURL; (*Handle) = new ANSCENTER::ANSLSHelper(st_privateKey, st_publicKey, st_licenseServiceURL); if (*Handle == nullptr) return 0; else return 1; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int Release(ANSCENTER::ANSLSHelper * *Handle) { try { if (!Handle || !(*Handle)) return 1; // already released delete* Handle; *Handle = nullptr; return 1; } catch (...) { return 0; } } extern "C" __declspec(dllexport) void SetLicenseServiceURL(ANSCENTER::ANSLSHelper * *Handle, const char* licenseServiceURL) { if (!Handle || !(*Handle) || !licenseServiceURL) return; (*Handle)->SetLicenseServiceURL(licenseServiceURL); } extern "C" __declspec(dllexport) int GetLicenseData(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, LStrHandle licenseData) { try { if (!Handle || !(*Handle) || !licenseKey) return 0; std::string st = (*Handle)->GetLicenseData(licenseKey); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(licenseData, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*licenseData)->cnt = size; memcpy((*licenseData)->str, st.c_str(), size); return 1; } else return 0; } else { return 0; } } catch (...) { return 0; } } extern "C" __declspec(dllexport) int LoadLicenseTemplate(ANSCENTER::ANSLSHelper * *Handle, const char* templateFilePath) { try { if (!Handle || !(*Handle) || !templateFilePath) return 0; bool result = (*Handle)->LoadLicenseTemplate(templateFilePath); if (result == true) return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GetCurrentHardwareId(ANSCENTER::ANSLSHelper * *Handle, LStrHandle currentHwID) { try { if (!Handle || !(*Handle)) return 0; std::string st = (*Handle)->GetCurrentHardwareId(); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(currentHwID, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*currentHwID)->cnt = size; memcpy((*currentHwID)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GenerateKey(ANSCENTER::ANSLSHelper * *Handle, int productId, const char* registrationName, int productFeature, int trialLicense, LStrHandle generatedKey) { try { if (!Handle || !(*Handle) || !registrationName) return 0; bool enableTrialLicense = false; if (trialLicense > 0)enableTrialLicense = true; std::string st = (*Handle)->GenerateKey(productId, registrationName, productFeature, enableTrialLicense); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(generatedKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*generatedKey)->cnt = size; memcpy((*generatedKey)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GenerateKeyWithExpiredDate(ANSCENTER::ANSLSHelper * *Handle, int productId, const char* registrationName, int productFeature, int expiredYear, int expiredMonth, int expiredDate, LStrHandle generatedKey) { try { if (!Handle || !(*Handle) || !registrationName) return 0; std::string st = (*Handle)->GenerateKey(productId, registrationName, productFeature, expiredYear, expiredMonth, expiredDate); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(generatedKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*generatedKey)->cnt = size; memcpy((*generatedKey)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int CheckLicenseKey(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, int productId){ //, LStrHandle strEnableFeature) { // Check if the license key is valid try { if (!Handle || !(*Handle) || !licenseKey || !registrationName) return -1; int enFeatures = 0; bool result = (*Handle)->CheckLicenseKey(licenseKey, registrationName, productId, enFeatures); if (result) return enFeatures; else return -1; } catch (...) { return -1; } } extern "C" __declspec(dllexport) int ValidateLicense(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, const char* existingActivationKey,LStrHandle activationKey) { try { if (!Handle || !(*Handle) || !licenseKey || !registrationName || !existingActivationKey) return UNKNOWN; std::string st = existingActivationKey; int result = (*Handle)->ValidateLicense(licenseKey, registrationName, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(activationKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*activationKey)->cnt = size; memcpy((*activationKey)->str, st.c_str(), size); return result; } else return UNKNOWN; } else return INVALID_LICENSE_KEY; } catch (...) { return UNKNOWN; } } extern "C" __declspec(dllexport) int ActivateLicense(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, LStrHandle activationKey) { // Always activate the license (need internet connection) try { if (!Handle || !(*Handle) || !licenseKey || !registrationName) return UNKNOWN; std::string st = ""; int result = (*Handle)->ActivateLicense(licenseKey, registrationName, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(activationKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*activationKey)->cnt = size; memcpy((*activationKey)->str, st.c_str(), size); return result; } else return UNKNOWN; } else return INVALID_LICENSE_KEY; } catch (...) { return UNKNOWN; } } extern "C" __declspec(dllexport) int ActivateLicenseWithCustomHWID(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, const char* hardwareId, LStrHandle activationKey) { try { if (!Handle || !(*Handle) || !licenseKey || !registrationName || !hardwareId) return UNKNOWN; std::string st; int result = (*Handle)->ActivateLicenseWithCustomHWID(licenseKey, registrationName, hardwareId, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(activationKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*activationKey)->cnt = size; memcpy((*activationKey)->str, st.c_str(), size); return result; } else return UNKNOWN; } else return INVALID_LICENSE_KEY; } catch (...) { return UNKNOWN; } }// Always activate the license (need internet connection) extern "C" __declspec(dllexport) int IsLicenseKeyValid(ANSCENTER::ANSLSHelper **Handle, const char* licenseKey, const char * registrationName) { // Only check the license key with registration name and expiration date only. This is used when developer to use internal APIs called try { if (!Handle || !(*Handle) || !licenseKey || !registrationName) return 0; bool result = (*Handle)->IsLicenseKeyValid(licenseKey, registrationName); if (result) return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GenerateOfflineActivationData(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, LStrHandle offlineActivationData) { try { if (!Handle || !(*Handle) || !licenseKey || !registrationName) return 0; std::string st = ""; int result = (*Handle)->GenerateOfflineActivationData(licenseKey, registrationName, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(offlineActivationData, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*offlineActivationData)->cnt = size; memcpy((*offlineActivationData)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int InstallOfflineLicense(ANSCENTER::ANSLSHelper * *Handle, const char* licenseKey, const char* registrationName, const char* activationKey) { try { if (!Handle || !(*Handle) || !licenseKey || !registrationName || !activationKey) return 0; return (*Handle)->InstallOfflineLicense(licenseKey, registrationName, activationKey); } catch (...) { return 0; } } //Utilities extern "C" __declspec(dllexport) int ExtractModelZipFile(const char* modelZipFile, const char* password, const char* modelName, LStrHandle extractedOutputFolder) { try { std::string st = ""; int result = ANSCENTER::ANSLSHelper::ExtractModelZipFile(modelZipFile, password, modelName, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(extractedOutputFolder, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*extractedOutputFolder)->cnt = size; memcpy((*extractedOutputFolder)->str, st.c_str(), size); return 1; } } return result; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ZipFolderToZipFile(const char* modelFolderSource, const char* modelZipFileDes, const char* password) { try { std::string stPass = password; if (stPass.empty()) password = "Sh7O7nUe7vJ/417W0gWX+dSdfcP9hUqtf/fEqJGqxYL3PedvHubJag=="; bool result = ANSCENTER::ANSLSHelper::ZipFolerWithPassword(modelFolderSource, modelZipFileDes, password); if (result == true) return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int PrepareEdgeModel(const char* modelZipFile, const char* zipFilePassword, const char* edgePassword, const char* modelName, const char* edgeSerialNumber,LStrHandle pathArray) { try { std::string st_configFilePathName = ""; std::string st_labelMapPathName = ""; std::string st_zipFilePathName = ""; int result = ANSCENTER::ANSLSHelper::PrepareEdgeModel(modelZipFile, zipFilePassword, edgePassword, modelName, edgeSerialNumber, st_configFilePathName, st_labelMapPathName, st_zipFilePathName); std::string st = st_configFilePathName + ";" + st_labelMapPathName + ";" + st_zipFilePathName; int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(pathArray, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*pathArray)->cnt = size; memcpy((*pathArray)->str, st.c_str(), size); return 1; } } return result; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GetSystemHardwareInformation(LStrHandle systemHardwareInformation) { try { std::string st = ANSCENTER::ANSLSHelper::GetSystemHardwareInformation(); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(systemHardwareInformation, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*systemHardwareInformation)->cnt = size; memcpy((*systemHardwareInformation)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ReleaseLoggers() { try { bool result = ANSCENTER::ANSLSHelper::ReleaseLogger(); if (result) return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ListANSLicenses(std::string & listLicense) { try { listLicense = ANSCENTER::ANSLicenseHelper::ListLicenses(); if (!listLicense.empty()) return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ListANSLicenses_LV(LStrHandle ansProductLicenses) { try { std::string st = ANSCENTER::ANSLicenseHelper::ListLicenses(); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(ansProductLicenses, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*ansProductLicenses)->cnt = size; memcpy((*ansProductLicenses)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ActivateTrialLicense(const char* productName) { return ANSCENTER::ANSLicenseHelper::ActivateTrialLicense(productName); } extern "C" __declspec(dllexport) int DeactivateLicense(const char* productName) { return ANSCENTER::ANSLicenseHelper::DeactivateLicense(productName); } extern "C" __declspec(dllexport) int ActivateProductLicense(const char* productName, const char* licenseKey) { return ANSCENTER::ANSLicenseHelper::ActivateLicense(productName,licenseKey); } extern "C" __declspec(dllexport) int ActivateProductLicenseWithCustomHWID(const char* productName, const char* licenseKey, const char* hwid, LStrHandle lvActivationKey) { try { std::string st; int result = ANSCENTER::ANSLicenseHelper::ActivateLicenseWithCustomHWID(productName, licenseKey, hwid, st); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(lvActivationKey, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*lvActivationKey)->cnt = size; memcpy((*lvActivationKey)->str, st.c_str(), size); return result; } else return LicenseKeyStatus::UNKNOWN; } else return LicenseKeyStatus::INVALID_LICENSE_KEY; } catch (...) { return LicenseKeyStatus::UNKNOWN; } } extern "C" __declspec(dllexport) int GetRegistrationName(const char* validationData, LStrHandle registrationName) { try { std::string st = ANSCENTER::ANSLicenseHelper::DecodeValidationData(validationData); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(registrationName, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*registrationName)->cnt = size; memcpy((*registrationName)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int GenerateActivationKeyData(const char* activationKey, const char* licenseKey, const char* hardwareId, const char* validationData, LStrHandle activationData) { try { std::string st = ANSCENTER::ANSLicenseHelper::GenerateActivationDataFile(activationKey, licenseKey, hardwareId, validationData); int size = (int)st.length(); if (size > 0) { MgErr error; error = DSSetHandleSize(activationData, sizeof(int32) + size * sizeof(uChar)); if (error == noErr) { (*activationData)->cnt = size; memcpy((*activationData)->str, st.c_str(), size); return 1; } else return 0; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ANSLicenseVerification(const char* licenseKey, int productId, const char* registrationName) { try{ bool result = ANSCENTER::ANSLicenseHelper::LicenseVerification(licenseKey, productId, registrationName); if (result)return 1; else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int ANSModelConversion(const char* zipModelFile, const char* zipModelPassword) { try { //1. Uzip the model file to a temp location std::string parentFolder = GetParentFolder(zipModelFile); if (parentFolder.empty()) { return -1; // or handle error appropriately } std::string modelName = GetFileNameWithoutExtension(zipModelFile) + "_converted"; const std::string outputFolder = GenerateOutputFolder(zipModelFile, modelName, true); if (!FolderExist(outputFolder)) fs::create_directory(outputFolder); bool extractedResult = ExtractProtectedZipFile(zipModelFile, zipModelPassword, modelName, outputFolder); if (!extractedResult) return 0; //2. Zip the model file to a temp location std::string newModelZipFile = CreateFilePath(parentFolder, modelName + ".zip"); std::string newModelZipPassword = "Sh7O7nUe7vJ/417W0gWX+dSdfcP9hUqtf/fEqJGqxYL3PedvHubJag=="; //3. Read names of classes from the label map file std::string labelMapFile = CreateFilePath(outputFolder, "classes.names"); if (labelMapFile.empty()) return 0; std::vector classesNames = Split(ReadFileContent(labelMapFile), "\n"); // 4. Create Categories folder std::string categoriesFolder = outputFolder + "\\Categories"; if (FolderExist(categoriesFolder))DeleteFolder(categoriesFolder); fs::create_directory(categoriesFolder); for (size_t i = 0; i < classesNames.size(); ++i) { std::ofstream outFile(categoriesFolder + "/" + classesNames[i] + "." + std::to_string(i + 1)); outFile.close(); } bool zipResult = ZipFolderWithPassword(outputFolder.c_str(), newModelZipFile.c_str(), newModelZipPassword.c_str()); if (zipResult) { DeleteFolder(outputFolder); return 1; } else return 0; } catch (...) { return 0; } } extern "C" __declspec(dllexport) int DeletePathRecursively(const char* pathTobeDeleted) { try { bool result = ANSCENTER::ANSLicenseHelper::DeleleteRecursively(pathTobeDeleted); if (result) return 1; else return 0; } catch (...) { return 0; } }