tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
2105
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    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 :
    1
    
    #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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    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] = [COLOR="Red"]mxCreateNumericArray[/COLOR](1,dims,mxINT32_CLASS, mxREAL);
        pRecBuf = (int*)[COLOR="Red"]mxGetPr[/COLOR](plhs[0]);                 // for ease of use
     
        if((pInpBuf == NULL) | (whi[0] == NULL) | (who[0] == NULL) | (pRecBuf == NULL))
            return false;
        else
            return true;
    }
     

  2. #2
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    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 :
    1
    2
    3
    4
    
    #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...
     

  3. #3
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    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.
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  3. Antworten: 2
    Letzter Beitrag: 12.11.06, 20:17
  4. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29
  5. [C++ Builder] "[Linker Fataler Fehler] Fatal: Unable to open file 'PROJECT1.OBJ'"
    Von Der nette Mann im Forum Borland CBuilder und VCL
    Antworten: 1
    Letzter Beitrag: 05.11.03, 12:31