It came to work a few days ago.
Here's my latest code:
#include <stdio.h>
#define DLLEXPORT __declspec(dllexport)
#define EXTERNC extern "C"
FILE *fileMesseinstellungen, *fileMessdaten[3];
/******************************************
Die nötigen Dateistreams werden erstellt
******************************************/
EXTERNC DLLEXPORT void openFiles(int AnzahlPhasen, char* pathMesseinstellungen,
char* pathMessdatenPh1, char* pathMessdatenPh2, char* pathMessdatenPh3) {
if(AnzahlPhasen == 3) {
fileMessdaten[0] = fopen(pathMessdatenPh1, "a+b"); //Die Messdateien für die einzelnen Phasen
fileMessdaten[1] = fopen(pathMessdatenPh2, "a+b"); //werden erstellt und geöffnet
fileMessdaten[2] = fopen(pathMessdatenPh3, "a+b");
}
else {
fileMessdaten[0] = fopen(pathMessdatenPh1, "a+b");
}
fileMesseinstellungen = fopen(pathMesseinstellungen, "r+"); //Die Messeinstellungen werden geöffnet
}
/**************************************
Alle Dateistreams werden geschlossen
**************************************/
EXTERNC DLLEXPORT void closeFiles() {
fclose(fileMesseinstellungen);
fclose(fileMessdaten[0]);
fclose(fileMessdaten[1]);
fclose(fileMessdaten[2]);
}
/***********************************
Ändert die Byteorder eines Double
***********************************/
void ChangeEndianDouble(double *val)
{
int i,j;
double temp;
char *tempPtr = NULL;
char *valPtr = NULL;
temp = *val;
tempPtr = (char *)&temp;
valPtr = (char *)val;
for (i=0, j=7; i<8; i++, j--)
valPtr[i] = tempPtr[j];
}
/**********************************
Ändert die Byteorder eines Float
**********************************/
void ChangeEndianSingle(float *val)
{
int i,j;
float temp;
char *tempPtr = NULL;
char *valPtr = NULL;
temp = *val;
tempPtr = (char *)&temp;
valPtr = (char *)val;
for (i=0, j=3; i<4; i++, j--)
valPtr[i] = tempPtr[j];
}
/************************************
Ändert die Byteorder eines Integer
************************************/
void ChangeEndianInt(int *val)
{
int i,j;
int temp;
char *tempPtr = NULL;
char *valPtr = NULL;
temp = *val;
tempPtr = (char *)&temp;
valPtr = (char *)val;
for (i=0, j=3; i<4; i++, j--)
valPtr[i] = tempPtr[j];
}
/***************************************************
Ändert die Byteorder eines Unsigned Short Integer
***************************************************/
void ChangeEndianU16Int(unsigned short int *val)
{
int i,j;
int temp;
char *tempPtr = NULL;
char *valPtr = NULL;
temp = *val;
tempPtr = (char *)&temp;
valPtr = (char *)val;
for (i=0, j=1; i<2; i++, j--)
valPtr[i] = tempPtr[j];
}
/****************************************
Ändert die Byteorder eines Float-Array
****************************************/
void ChangeEndianSingleArray(int arraySize, float *array)
{
int i;
for (i=0; i<arraySize; i++)
ChangeEndianSingle(&array[i]);
}
/**************************
Schreiben der Messdatei
**************************/
EXTERNC DLLEXPORT int appendMessblock(int phase, double *zeitstempel, float spektrum[], float pegelverlauf[], unsigned short int *code) {
int numwritten = 0, error = 0;
if(fileMessdaten) {
ChangeEndianDouble(zeitstempel);
numwritten = fwrite(zeitstempel, sizeof(double), 1, fileMessdaten[phase-1]);
if(numwritten != 1) error = 1; //Fehler beim Schreiben aufgetreten
ChangeEndianSingleArray(51, spektrum);
numwritten = fwrite(spektrum, sizeof(float), 51, fileMessdaten[phase-1]);
if(numwritten != 51) error = 1; //Fehler beim Schreiben aufgetreten
ChangeEndianSingleArray(16, pegelverlauf);
numwritten = fwrite(pegelverlauf, sizeof(float), 16, fileMessdaten[phase-1]);
if(numwritten != 16) error = 1; //Fehler beim Schreiben aufgetreten
ChangeEndianU16Int(code);
numwritten = fwrite(code, sizeof(unsigned short int), 1, fileMessdaten[phase-1]);
if(numwritten != 1) error = 1; //Fehler beim Schreiben aufgetreten
}
else
error = 2; //Fehler beim Zugriff aufgetreten
return error;
}
/********************************************************
Schreiben der Anzahl Messungen in die Messeinstellungen
********************************************************/
EXTERNC DLLEXPORT int writeAnzahlMessungen(int *anzahl, int offset) {
int numwritten = 0, error = 0;
if(fileMesseinstellungen) {
fseek(fileMesseinstellungen, offset, SEEK_SET); // Filestream-Position setzen
ChangeEndianInt(anzahl);
numwritten = fwrite(anzahl, sizeof(int), 1, fileMesseinstellungen);
if(numwritten != 1) error = 1; //Fehler beim Schreiben aufgetreten
}
else
error = 2; //Fehler beim Zugriff aufgetreten
return error;
}
Happy Christmas
Stefan