In eine MEX-File geht das leider nicht mehr, zumindest funktioniert es bei mir noch nicht.
Gibt es eine Möglichkeit, dieses fprintf() trotzdem einzubauen?
Viele Grüße,
k.
Olaf Naujocks
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.11.2007, 14:32
Titel:
Moin keloid,
ich wüsste eigentlich keinen Grund warum das nicht gehen sollte. Ich habe das soeben mal mit einer s-function probiert und das geht ohne probleme. s-functions sind nichts anderes als spezielle mex-dlls. Übersetzt werden sie auch mit dem mex compiler.
Du solltest mal Näheres zu Fehlermeldungen, verwendetem compiler usw preisgeben.
ich habe das Problem inzwischen gelöst.
Es lag offensichtlich daran, dass ich den File-Pointer nicht direkt nach dem Funktionsaufruf deklariert habe, sondern erst an der Stelle der Funktion, an der ich ihn verwenden wollte. Offensichtlich hat der Compiler, im Gegensatz zu anderen gebräuchlichen C-Compilern, ein Problem damit, wenn Variablen nicht direkt nach dem Funktionsaufruf deklariert werden.
Ich verwende übrigens den Compiler Lcc-win32 C 2.4.1, der bei Matlab R2007b dabei ist.
Um es mit einem Beispielcode darzustellen:
Code:
#include "mex.h"
void test(double *array1, double* array2, int L){
int i;
mxArray *obs;
So funktioniert es nicht, es gibt die Fehlermeldung:
Zitat:
Error test.c: 10 illegal use of type name `FILE'
Error test.c: 10 undeclared identifier `fid'
Error test.c: 10 operands of * have illegal types `struct _iobuf' and `int'
Error test.c: 10 operands of = have illegal types `int' and `pointer to struct _iobuf'
Error test.c: 10 lvalue required
Error test.c: 13 type error in argument 1 to `fprintf'; found `int' expected `pointer to struct _iobuf'
Warning test.c: 10 possible usage of fid before definition
6 errors, 1 warnings
Mit dem folgenden Code funktioniert es dann:
Code:
#include "mex.h"
void test(double *array1, double* array2, int L){
int i;
FILE *fid;
mxArray *obs;
das ist ansi c standard, dass alle variablendeklarationen am Anfang der Funktion stehen muessen. Ist es wirklich so ,dass einige ander c compiler das so akkzeptieren? Oder sind das etwa doch c++ compiler. In c++ gilt diese Beschränkung der Variablendeklaration nämlich nicht.
Also ich habe es mit verschiedenen gcc-Compilern versucht, unter drei verschiedenen Linux-Distributionen (Suse, Gentoo, Ubuntu, wo ich nicht weiss, inwieweit sich die Compiler überhaupt unterscheiden) und mit dem gcc-Compiler von MinGW für Windows.
Der Matlab-Lcc ist somit der erste, bei dem mir das wirklich aufgefallen ist.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.