//Notwendig für MEX
#define WFS_close
#define WFS_ErrorMessage
#define WFS_RevisionQuery
/*===============================================================================================================================
Data type definitions
===============================================================================================================================*/
typedef struct { char version_wfs_driver[WFS_BUFFER_SIZE];
char version_cam_driver[WFS_BUFFER_SIZE];
int handle;
} instr_t;
/*===============================================================================================================================
Function Prototypes + Global Variables
===============================================================================================================================*/
void handle_errors (int);
instr_t instr = {0}; // all instrument related data are stored in this structure
/*===============================================================================================================================
Code
===============================================================================================================================*/
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int err;
// Get the driver revision
if(err = WFS_RevisionQuery (NULL, instr.version_wfs_driver, instr.version_cam_driver)) // pass NULL because handle is not yet initialized
handle_errors(err);
printf("Camera USB driver version : %s\n", instr.version_cam_driver);
printf("WFS instrument driver version : %s\n\n", instr.version_wfs_driver);
}
/*===============================================================================================================================
Handle Errors
This function retrieves the appropriate text to the given error number and closes the connection in case of an error
===============================================================================================================================*/
void handle_errors (int err) { char buf[WFS_ERR_DESCR_BUFFER_SIZE];
// close instrument after an error has occured
printf("Sample program will be closed because of the occured error, press <ENTER>.");
WFS_close(instr.handle); // required to release allocated driver data
fflush(stdin);
getchar();
exit(1);
} }
benutze, erscheint eine einzige Warnung, aber er kompiliert:
Zitat:
minimal_mex_forum.c(43) : warning C4047: '=' : 'int' differs in levels of indirection from 'char *'
Diese Warnung, welche ich leider nicht komplett verstehe, kam auch bei allen anderen Funktionen (habe ich jetzt alle rausgenommen, um ein exemplarisches Beispiel zu haben), die über die "err = ..." Abfrage verfügten. . Wenn ich die gemexte Funktion jetzt starte, stürzt Matlab augenblicklich ab. Ändere ich die Zeile
Code:
if(err = WFS_RevisionQuery (NULL, instr.version_wfs_driver, instr.version_cam_driver)) // pass NULL because handle is not yet initialized
handle_errors(err);
läuft das Programm, nur die Funktion wird leider nicht sinngemäß benutzt, denn die Ausgabe spuckt keine Werte aus. Hier mal die Beschreibung von WFS_RevisionQuery:
Zitat:
WFS_RevisionQuery
int WFS_RevisionQuery (WFS_hdl, char instrumentDriverRevision[], char camDriverRevision[]);
Purpose
This function returns the revisions of the WFS instrument driver and camera driver.
Parameters
Input
Name Type Description
instrumentHandle WFS_hdl
This parameter accepts the instrument handle returned by function init to select the desired instrument driver session. You may also pass NULL. In this case only a valid instrument driver revision is returned.
Output
Name Type Description
instrumentDriverRevision char []
This parameter returns the WFS Instrument Driver software revision.
Note: The string must contain at least WFS_BUFFER_SIZE (256) elements (char[WFS_BUFFER_SIZE]).
Revision is coded for example: "3.0"
camDriverRevision char []
This parameter returns the Camera Driver Revision the WFS instrument driver is calling. A valid instrument handle is required for this.
Format:
major.minor.built_no for WFS150/WFS300 series instruments
major.minor for WFS10 series instruments
Note: The string must contain at least WFS_BUFFER_SIZE (256) elements (char[WFS_BUFFER_SIZE]).
Return Value
Name Type Description
status int
This value shows the status code returned by the function call.
For Status Codes see function ErrorMessage.
Der selbe Code, ohne die Mex-spezifischen Änderungen, kompiliert und funktioniert unter C tadellos.
Meine Befürchtung ist also, dass Mex irgendwie mit der Library nicht klar kommt - kann mir da jemand helfen?
Was ich als potentiellen Fehler sehe: Die
habe ich eingefügt, da das Kompilieren sonst immer mit dem Fehler
Zitat:
minimal_mex.obj : error LNK2019: unresolved external symbol WFS_ErrorMessage referenced in function handle_errors
(pro nicht definierter Fkt. halt einer) abgebrochen hat. Kann es sein, dass er so zwar kompiliert, die Funktionen aber gar keine Funktion haben? Auf der anderen Seite verstehe ich den Fehler nicht, denn die Library liegt genau in dem Pfad, den ich angegeben habe. Mex findet sie auch, was man durch das "-v" ja einsehen kann.
Alle relevanten Dateien habe ich angehängt.
Meine Spezifikation:
Windows 7 Enterprise (64 bit)
Matlab: R2013b
Compiler: Microsoft Software Development Kit (SDK) 7.1
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.