Matlab-Befehle aus "mex.h" bzw. "matrix.h" bringen Linker Fehler

Cappaja

Erfahrenes Mitglied
Hi,

steh erneut seit tagen vor demselben problem. in google macht sich das thema sehr rar und zudem alles in englisch. Zu dem unten genannten Code habe ich natürlich die mex.h inkludiert. Dennoch bekomme ich für die rot angezeigten Matlab-Funktionen Linker-Fehler. Dasselbe Problem hatte ich zuvor auch mit der mmsystem.h allerdings hat mir hier folgende Zeile die Fehler verschwinden lassen:
Code:
#pragma comment(lib, "winmm.lib")
Weiß vielleicht jemand wie ich die Matlab-Funktionen aus mex.h oder matrix.h für MFC valide machen kann?
Hier noch die Funktion welche die rotmarkierten Fehler auslöst:
Code:
bool CWiwoDlg::AllocBuffers(void)
{
	int i, nDataBlockSize, dims[1];

	// allocate WAVEHDR buffer blocks
	nDataBlockSize = GlPar.nNperB*GlPar.nChannels*2;   // in Bytes
	for(i=0; i < MAX_BUFFERS; i++)
    {
		whi[i] = (WAVEHDR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WAVEHDR));
		if(whi[i])
        {
			whi[i]->lpData = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nDataBlockSize);
			whi[i]->dwBufferLength = nDataBlockSize;
        }
		who[i] = (WAVEHDR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WAVEHDR));
		if(who[i])
		{
			who[i]->lpData = (char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nDataBlockSize);
			who[i]->dwBufferLength = nDataBlockSize;
		}
	}
	// input buffer in DWORDS, used to sign extend 16 bit integer data
	// to 32 bit integers
	pInpBuf = (int*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nDataBlockSize*2); // in DWORDS = 4 bytes

	// create MATLAB array to store INPUT and OUTPUT data (GlPar.nMBuffers acquired)
	dims[0] = GlPar.nNperB * GlPar.nChannels *GlPar.nMBuffers ;
	plhs[0] = mxCreateNumericArray(1,dims,mxINT32_CLASS, mxREAL);
	pRecBuf = (int*)mxGetPr(plhs[0]);                 // for ease of use

	if((pInpBuf == NULL) | (whi[0] == NULL) | (who[0] == NULL) | (pRecBuf == NULL))
		return false;
	else
		return true;
}
 

Cappaja

Erfahrenes Mitglied
im internet findet man des öfteren den hinweis das es mit folgenden Zeilen ebenfalls gehen müsste, allerdings kommt dann die Meldung das die lib nicht geöffnet werden kann und das Bibliotheksformat ungültig sei.
Code:
#pragma comment(lib, "Libmx.lib")
#pragma comment(lib, "libmex.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libeng.lib")
Ich habe selbstverständlich alle Files inkludiert und die dll sowie lib Dateien im gleichen Arbeitsverzeichnis drin, aber dennoch bleibt es beim Linker Fehler...
 

Cappaja

Erfahrenes Mitglied
habe das problem jetzt endlich gelöst.

Unter "Matlab/R2007a/extern/lib/win32/microsoft/"
finden sich die Library Dateien für die Matlab-Funktionen. Meine waren auf Borland zugeschnitten sodass der Compiler natürlich einen Linker-Fehler ausgab.

libmex.lib
libmat.lib
libeng.lib
libmx.lib

Diese 4 Dateien müssen dann lediglich in das Projekt eingebunden werden und schon wurde der Code erkannt. Unter Visual Studio 2005 muss man im übrigen zusätzlich den Include-Pfad angeben ("Matlab/R2007a/extern/include/") sowie eine bestimmte Einstellung ändern, ich habe sie momentan nicht mehr im Kopf, kann sie aber bei Interesse nochmal nachtragen.