Reading a Matrix File in C++ and Doing Something With It
Last week’s post showed how to open a path file using C++. This week’s post will show how to open a Cube Voyager matrix file in C++.
Setup
Like last week, we need to reference VoyagerFileAccess.lib in the project. Â We also need to add the external references in the header file as below:
extern "C" __declspec(dllimport)void* MatReaderOpen(const char *filename, char *errMsg, int errBufLen); extern "C" __declspec(dllimport)int MatReaderGetNumMats(void* state); extern "C" __declspec(dllimport)int MatReaderGetNumZones(void* state); extern "C" __declspec(dllimport)int MatReaderGetMatrixNames(void* state, char **names); extern "C" __declspec(dllimport)int MatReaderGetRow(void* state, const int mat, const int row, double *buffer); extern "C" __declspec(dllimport)void MatReaderClose(void* state);
Also ensure that the project is setup with the character set of “Not Set” as opposed to Unicode, which seems to be a default in MS Visual C++ Express Edition.
Main Application
The main application is fairly simple and just opens the matrix and outputs the number of tables and zones to the screen.
#include "stdafx.h"
#include <stdio.h>
#include <iostream.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char errMsg[256]="";
// Open the matrix
void* matrixState=MatReaderOpen(argv[1],errMsg,256);
// Get number of tables in the matrix
int nMats = MatReaderGetNumMats(matrixState);
// Get number of zones in the matrix
int nZones = MatReaderGetNumZones(matrixState);
// Output to screen
cout << "File " << argv[1] << endl;
cout << "Number of Tables....." << nMats << endl;
cout << "Number of Zones......" << nZones << endl;
// Close the matrix
MatReaderClose(matrixState);
cout << "Matrix Closed." << endl;
cout << "Press any key to close" << endl; char tmp; cin >> tmp;
return 0;
}
The output looks like the below:
Tags: c++, cube, voyager, voyager api
You must be logged in to post a comment.