Программирование для STATISTICA на C++

COM-архитектура STATISTICA открывает доступ к библиотеки функций, который можно реализовать при помощи таких языков программирования как: Borland Delphi, Visual Basic, C#, и C++.   В случае C++, разработчики могут интегрировать Объектную Модель STATISTICA также как и библиотеки Microsoft Foundation Classes, Стандартные библиотеки C++, и Standard Template Library. Например, алгоритмы и функции библиотек STL можно достаточно легко объеденить с библиотеками STATISTICA в пользовательском приложении.

Надстройки. Наиболее часто встречающийся случай использования C++ и библиотек STATISTICA является создание пользовательской динамической библиотеки (*.dll). Используя Active Template Library совместно с COM архитетурой STATISTICA, вы можете создать свой собственный интерфейс, который в дальнейшем может быть интегрирован в STATISTICA.

Производительность. Другой часто встречающийся случай использования C++ в пользовательском приложении STATISTICA, является увеличение скорости производительности программ. Связано это со возможностями C/C++.

Анализ основных статистик в C++

Данный пример демонстрирует способ запуска приложения STATISTICA, настройки электронной таблицы и анализа основных статистик.

/*В данном примере мы вычислим размер доступной и свободной памяти
(физической памяти, страничной и виртуальной). Далее,
запустим описательные статистики для двух переменных (вся имеющаяся память и доступная).
И в конце итоги сохраним в таблице.*/

//Windows включения
#include
<windows.h>
#include
<comdef.h> //необходимо для COM
/*Директива "#import" импортирует описание классов выбранного файла.
 В нашем случае, файл "statist.exe" открывает нам доступ к
интерфейсу и библиотекам документов STATISTICA. Для этого вам необходимо будет переписать
этот файл в вашу директорию проекта или вручную ввести полный путь к нему
в директиве #import. Замечание, "#import" в Visual C++ является стандартной директивой,
если вы используете другой компилятор, то советуем вам внимательно ознакомится
с документацией к нему: каким образом происходит импортирование COM интерфейсов.*/

#import "statist.exe"

#import "sta_bas.dll"

//Исключение редко используемые заголовки Windows
#define
WIN32_LEAN_AND_MEAN
//окончание Windows включений

#define MEGABYTE 1048576 //2^20
#include
<cstdio>

using namespace STATISTICA;
using namespace
STABasicStatistics;

int main()

{

//получение информации о текущей памяти
MEMORYSTATUS Memory;
::GlobalMemoryStatus (&Memory);

//Физическая память
long
TotalPhyMem = static_cast<long>(Memory.dwTotalPhys/MEGABYTE);
long
FreePhyMem = static_cast<long>(Memory.dwAvailPhys/MEGABYTE);

//Страничная память
long
TotalPageFile = static_cast<long>(Memory.dwTotalPageFile/MEGABYTE);
long
FreePageFile = static_cast<long>(Memory.dwAvailPageFile/MEGABYTE);

//Виртуальная память
long
TotalVirtMem = static_cast<long>(Memory.dwTotalVirtual/MEGABYTE);
long
FreeVirtMem = static_cast<long>(Memory.dwAvailVirtual/MEGABYTE);

long TotalAvailMem = TotalPhyMem + TotalPageFile + TotalVirtMem;
long
TotalFreeMem = FreePhyMem + FreePageFile + FreeVirtMem;

//Запуск STATISTICA
//Инициализация COM

::CoInitialize(NULL);
STATISTICA::_ApplicationPtr pApp;

//инициализация нового объекта STATISTICA через COM
HRESULT hr = ::CoCreateInstance(__uuidof(STATISTICA::Application),NULL,CLSCTX_SERVER,
__uuidof(STATISTICA::_Application),reinterpret_cast<void**>(&pApp));

//проверка возможности COM создания приложения STATISTICA
if (FAILED(hr))

{
::MessageBox(NULL,"Unable to intialize STATISTICA",
"Initialization Failure",MB_ICONHAND);
return
EXIT_FAILURE;
}

try

{
//создание новой электронной таблицы под названием "Current Memory"

_SpreadsheetPtr pSpreadSheet = pApp->Spreadsheets->New("Current Memory");
pSpreadSheet->Header->PutValue("Total and Available Computer Memory");

//увеличение ширины наблюдений
pSpreadSheet->PutCaseNameWidth(1.5);

//переименовываем первые две переменных
pSpreadSheet->PutVariableName(1,"Total");
pSpreadSheet->PutVariableName(2,"Available");

//переименовываем первых три наблюдения
pSpreadSheet->PutCaseName(1,"Physical Memory");
pSpreadSheet->PutCaseName(2,"Page File Memory");
pSpreadSheet->PutCaseName(3,"Virtual Memory");

//заполнение электронной таблицы вычисленными данными
pSpreadSheet->PutValue(1,1,TotalPhyMem);
pSpreadSheet->PutValue(1,2,FreePhyMem);
pSpreadSheet->PutValue(2,1,TotalPageFile);
pSpreadSheet->PutValue(2,2,FreePageFile);
pSpreadSheet->PutValue(3,1,TotalVirtMem);
pSpreadSheet->PutValue(3,2,FreeVirtMem);

//удаление лишних переменных и наблюдений
pSpreadSheet->DeleteVariables(3,10);
pSpreadSheet->DeleteCases(4,10);
pSpreadSheet->Visible = true;

//запуск описательных статистик по нашим данным
_AnalysisPtr pBasDiag = pApp->Analysis(scBasicStatistics);
pBasDiag->Run();
BasDescriptiveStatisticsPtr pBasDesc = pBasDiag->Dialog;
//анализ переменных

pBasDesc->PutVariables("1 2");
//все статистики кроме стан. откл.

pBasDesc->StandardDeviation = false;
//также включаем суммы, размахи и медианы

pBasDesc->Sum = true;
pBasDesc->Range = true;
pBasDesc->Median = true;

//process the analysis output
pBasDiag->GetRouteOutput(pBasDesc->Summary.GetInterfacePtr())->PutVisible(true);
pBasDiag->Close();

//включаем наши статистики в таблицу
pSpreadSheet->AddCases(3,1);
pSpreadSheet->PutCaseName(4,"Totals:");
pSpreadSheet->PutValue(4,1,TotalAvailMem);
pSpreadSheet->PutValue(4,2,TotalFreeMem);
}

catch(_com_error Err)

{
::MessageBox(NULL,Err.Description(),pApp->Name,MB_ICONHAND);
return
EXIT_FAILURE;
}

//очистка после инициализации COM
pApp.Release();
::CoUninitialize();
return
EXIT_SUCCESS;
}




(c) Copyright StatSoft, Inc., 1984-2003
STATISTICA является торговой маркой StatSoft, Inc.