' schrieb:Wahrscheinlich, dass Du irgendwas mit den LabVIEW Datenbuffern tust die an das CIN gegeben werden und wenn LabVIEW davon zurückkehrt stolpert es darüber. Du darfst keinesfalls einfach irgendwelche Pointer/Handles überschreiben im CIN, weil Du etwa denkst die brauch ich eh nicht mehr, etwa zur Verwendung als temporäre Variable. LabVIEW geht davon aus das alle Handles die an das CIN übergeben konsistent bleiben (d.h. wenn Du etwas daran änderst muss dass korrekt durch Aufruf der LabVIEW Manager Funktionen geschehen), da LabVIEW am Ende des CINs alles sauber aufräumen will um mit dem Diagramm weiterfahren zu können.
Ansonsten ist wohl ohne den Sourcecode zum nachschauen und testen für niemanden noch mehr zu sagen.
Rolf Kalbermatter
Hier mal noch der Quellcode um den es sich handelt:
/* CIN source file */
#include ”extcode.h“
#include <mil.h>
#include <windows.h>
#define PixelX 320
#define PixelY 256
UseDefaultCINInit
UseDefaultCINDispose
UseDefaultCINAbort
UseDefaultCINLoad
UseDefaultCINUnload
UseDefaultCINSave
/* Typedefs */
typedef struct {
int32 dimSizes[2];
float64 Numerisch[1];
} TD1
typedef TD1 **TD1Hdl;
extern “C” MgErr CINRun(TD1Hdl Array);
MgErr CINRun(TD1Hdl Array)
{
MIL_ID
MilApplication = M_NULL,
MilSystem = M_NULL,
MilDigitizer = M_NULL,
MilGrabBuffer = M_NULL;
unsigned char ImageBuffer[PixelY][PixelX];
float64 *ptrElementOfResultArray;
char *DCF_FILE_PATH;
int row, col;
(*Array)->dimSizes[0] = PixelY;
(*Array)->dimSizes[1] = PixelX;
ptrElementOfResultArray = (*Array)->Numerisch;
*ptrElementOfResultArray = 0;
DCF_FILE_PATH = “D:\Programme\Matrox...\Solios_DCF\Cedip ...”
MilApplication = MappAlloc(M_DEFAULT, M_NULL);
MilSystem = MsysAlloc(M_SYSTEM_SOLIOS, M_DEV0, M_COMPLETE, M_NULL);
MilDigitizer = MdigAlloc(MilSystem, M_DEV0, DCF_FILE_PATH, M_DEFAULT, M_NULL);
MilGrabBuffer = MbufAlloc2d(MilSystem, PixelX, PixelY, M_UNSIGNED+8, M_IMAGE+MGRAB, M_NULL);
if (MappGetError(MGLOBAL, M_NULL))
{
goto release;
}
MdigGrab(MilDigitizer, MilGrabBuffer);
if (MappGetError(MGLOBAL, M_NULL))
{
goto release;
}
MbufGet2d(MilGrabBuffer, 0, 0, PixelX, PixelY, ImageBuffer);
if (MappGetError(MGLOBAL, M_NULL))
{
goto release;
}
for (col = 0; col < PixelX; col++)
{
for(row = 0; row < PixelY; row++)
{
*ptrElementOfResultArray = ImageBuffer[col][row];
ptrElementOfResultArray++;
if (MappGetError(MGLOBAL, M_NULL))
{
goto release;
}
}
}
release:
MbufFree(MilGrabBuffer);
MdigFree(MilDigitizer);
MsysFree(MilSystem);
MappFree(MilApplication);
Return noErr;
}