1) Download The Library
The first step is to download our library from http://getlittleapps.com/little-software-stats/libraries/cppdll-latest.zip
2) Include The Library
Using a Windows C++ project that you created, add the “LittleSoftwareStatsDLL.dll” (located in the DLL folder) to the folder where the result of the compiled code is located.
3) Integrate with your software
Next, you’ll want to call the DLL from your code to use it with your Little Software Stats. The following code is from Example.cpp which is included in the library:
/* * Little Software Stats - C++ DLL Library * Copyright (C) 2008 Little Apps (http://www.little-apps.org) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "stdafx.h" #ifdef UNICODE #define WIDEN2(x) L ## x #define WIDEN(x) WIDEN2(x) #define __WFILE__ WIDEN(__FILE__) #endif // Formats #define FORMAT_XML 0 #define FORMAT_JSON 1 typedef void (__cdecl *fStartProc)(LPCTSTR, int, LPCTSTR, LPCTSTR); typedef void (__cdecl *fStopProc)(); typedef void (__cdecl *fEventProc)(LPCTSTR, LPCTSTR); typedef void (__cdecl *fEventValueProc)(LPCTSTR, LPCTSTR, LPCTSTR); typedef void (__cdecl *fEventPeriodProc)(LPCTSTR, LPCTSTR, int, BOOL); typedef void (__cdecl *fLogProc)(LPCTSTR); typedef void (__cdecl *fCustomDataProc)(LPCTSTR, LPCTSTR); typedef void (__cdecl *fLicenseProc)(TCHAR); typedef void (__cdecl *fExceptionProc)(LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR); typedef void (__cdecl *fInstallProc)(LPCTSTR, LPCTSTR); typedef void (__cdecl *fUninstallProc)(LPCTSTR, LPCTSTR); fStartProc fStart; fStopProc fStop; fEventProc fEvent; fEventValueProc fEventValue; fEventPeriodProc fEventPeriod; fLogProc fLog; fCustomDataProc fCustomData; fLicenseProc fLicense; fExceptionProc fException; fInstallProc fInstall; fUninstallProc fUninstall; bool LoadDll() { HINSTANCE hInst = LoadLibrary(_T("LittleSoftwareStatsDLL.dll")); if (hInst != NULL) { if ((fStart = (fStartProc) GetProcAddress(hInst, "Start")) == NULL) return false; if ((fStop = (fStopProc) GetProcAddress(hInst, "Stop")) == NULL) return false; if ((fEvent = (fEventProc) GetProcAddress(hInst, "Event")) == NULL) return false; if ((fEventValue = (fEventValueProc) GetProcAddress(hInst, "EventValue")) == NULL) return false; if ((fEventPeriod = (fEventPeriodProc) GetProcAddress(hInst, "EventPeriod")) == NULL) return false; if ((fLog = (fLogProc) GetProcAddress(hInst, "Log")) == NULL) return false; if ((fCustomData = (fCustomDataProc) GetProcAddress(hInst, "CustomData")) == NULL) return false; if ((fLicense = (fLicenseProc) GetProcAddress(hInst, "License")) == NULL) return false; if ((fException = (fExceptionProc) GetProcAddress(hInst, "Exception")) == NULL) return false; if ((fInstall = (fInstallProc) GetProcAddress(hInst, "Install")) == NULL) return false; if ((fUninstall = (fUninstallProc) GetProcAddress(hInst, "Uninstall")) == NULL) return false; return true; } return false; } void Event() { // Event info const TCHAR szCategory[] = _T("Buttons"); const TCHAR szEvent[] = _T("OK"); // Send event fEvent(szCategory, szEvent); } void EventValue() { // Event value info const TCHAR szCategory[] = _T("View"); const TCHAR szEventName[] = _T("Zoom"); const TCHAR szEventValue[] = _T("In"); // Or Out // Send event value fEventValue(szCategory, szEventName, szEventValue); } void EventPeriod() { // Event period info const TCHAR szCategory[] = _T("Main"); const TCHAR szEventName[] = _T("Scan"); int nDuration = 60; // equals 60 seconds or 1 minute bool bCompleted = false; // Send event period fEventPeriod(szCategory, szEventName, nDuration, bCompleted); } void Log() { // Log message const TCHAR szLogMsg[] = _T("Hello World!"); // Send message fLog(szLogMsg); } void CustomData() { // Custom data const TCHAR szCustomName[] = _T("Name"); const TCHAR szCustomValue[] = _T("Joe Blow"); // Send custom data fCustomData(szCustomName, szCustomValue); } void License() { // Software licenses TCHAR chLicenseFree = _T('F'); TCHAR chLicenseDemo = _T('D'); TCHAR chLicenseTrial = _T('T'); TCHAR chLicenseRegistered = _T('R'); TCHAR chLicenseCracked = _T('C'); fLicense(chLicenseCracked); } int _tmain(int argc, _TCHAR* argv[]) { UNREFERENCED_PARAMETER(argc); UNREFERENCED_PARAMETER(argv); if (!LoadDll()) { _tprintf(_T("Unable to load DLL")); return -1; } // API info const TCHAR szApiUrl[] = _T(""); // URL to API (ie: http://YOURWEBSITEHERE/api.json) int nApiFormat = FORMAT_JSON; // Must correspond with extension in URL (FORMAT_XML or FORMAT_JSON) // Application info const TCHAR szAppId[] = _T(""); // Application ID (ie: 26ad4eb8f804200f1e23b27c1873d703) const TCHAR szAppVer[] = _T(""); // Application version (ie: 1.0) if (_tccmp(szApiUrl, _T("")) == 0) { _tprintf(_T("API URL cannot be empty")); return -1; } if (_tccmp(szAppId, _T("")) == 0) { _tprintf(_T("Application ID cannot be empty")); return -1; } if (_tccmp(szAppVer, _T("")) == 0) { _tprintf(_T("Application version cannot be empty")); return -1; } // Start tracking fStart(szApiUrl, nApiFormat, szAppId, szAppVer); Log(); // Exceptions try { throw 20; } catch(...) { LPCTSTR szStackTrace = _T("N/A"); // Set stack trace to "n/a" since were unable to get a stack trace LPCTSTR szMessage = _T("Divide by zero"); LPCTSTR szTarget = _T(""); TCHAR szSource[512]; ZeroMemory(szSource, 512); #ifdef UNICODE _stprintf_s(szSource, 512, _T("%s %d"), __WFILE__, __LINE__); #else _stprintf_s(szSource, 512, _T("%s %d"), __FILE__, __LINE__); #endif fException(szMessage, szStackTrace, szSource, szTarget); } fStop(); return 0; }
LittleSoftwareStatsDLL Functions
There are other functions that can be utilized to collect data using LittleSoftwareStatsDLL.dll which are described below:
// Starts tracking software // Example: Start(_T("http://stats.mywebsite.com/api.json"), FORMAT_JSON, _T("26ad4eb8f804200f1e23b27c1873d703"), _T("1.0")); void Start(LPCTSTR szApiUrl, int nApiType, LPCTSTR szAppId, LPCTSTR szAppVer); // Stops tracking software and sends data to API // Example: Stop(); void Stop(); // Track an event // Example: Event(_T("Events"), _T("Scan")); void Event(LPCTSTR szCategoryName, LPCTSTR szEventName); // Track an event value // Example: EventValue(_T("Settings", _T("Theme"), _T("Blue")); void EventValue(LPCTSTR szCategoryName, LPCTSTR szEventName, LPCTSTR szEventValue); // Track an event period // Example: EventPeriod(_T("Scans"), _T("Clean"), 360, TRUE); void EventPeriod(LPCTSTR szCategoryName, LPCTSTR szEventName, int nEventDuration, BOOL bCompleted); // Track a log message // Example: Log(_T("Hello World!")); void Log(LPCTSTR szLogMessage); // Track software license // License parameter ("chLicense") can be either 'F' (Free), 'T' (Trial), 'R' (Registered), 'D' (Demo), or 'C' (Cracked) // Example: License(_T('F')); void License(TCHAR chLicense); // Track custom data // Example: CustomData(_T("GFX Card Brand"), _T("NVIDIA")); void CustomData(LPCTSTR szDataName, LPCTSTR szDataValue); // Track an exception // Example: Exception(_T("Divide by zero"), _T("N/A"), _T("Example.cpp 29"), _T("")); void Exception(LPCTSTR szMessage, LPCTSTR szStackTrace, LPCTSTR szSource, LPCTSTR szTargetSite); // Track an installation // Example: Install(_T("26ad4eb8f804200f1e23b27c1873d703"), _T("1.0")); void Install(LPCTSTR szAppId, LPCTSTR szAppVer); // Track an uninstallation // Example: Uninstall(_T("26ad4eb8f804200f1e23b27c1873d703"), _T("1.0")); void Uninstall(LPCTSTR szAppId, LPCTSTR szAppVer);
Notes
Please see the notes for this project on GitHub for more information.
Development Version
You can get the latest developer version of this library from GitHub. This version is not recommended, but it does contain new features. You will need the Git VCS to download the developer version.
You can get a copy of the branch using the command:
$ git clone [email protected]:little-apps/LittleSoftwareStatsDLL.git
You can also browse the source code here:
https://github.com/little-apps/LittleSoftwareStatsDLL