Probleme mit Delegate



  • Hallo zusammen,

    ich versuche gerade ein SDK zur Ansteuerung einer USB-Kamera in einem kleinen Windows-Form Projekt zu testen. Das SDk habe ich mittels DLL in mein Projekt eingebunden. Das SDk stellt eine Funktion bereit, mit der man ein Delegaten installieren kann, der aufgerufen wird, wenn ein Bild von der Kamera geschossen wird. Leider schaffe ich es nicht, den richtigen Delegaten der Funktion zu übergeben. Vielleicht könnt ihr mir hier weiterhelfen!!

    Hier ein Auszug der Header-Datei des SDKs:

    ...
    typedef struct {
        int CameraID;
        int Row;
        int Column;
        int Bin;
        int XStart;
        int YStart;
        int ExposureTime;
        int RedGain;
        int GreenGain;
        int BlueGain;
        int TimeStamp;
        int TriggerOccurred;
        int TriggerEventCount;
        int ProcessFrameType;
        int FilterAcceptForFile;
    } TProcessedDataProperty;
    
    ...
    typedef void (* DeviceFaultCallBack)( int DeviceType );
    typedef void (* FrameDataCallBack)( TProcessedDataProperty* Attributes, unsigned char *BytePtr );
    
    ...
    
    SDK_API BUFUSB_InstallFrameHooker( int FrameType, FrameDataCallBack FrameHooker );
    SDK_API BUFUSB_InstallUSBDeviceHooker( DeviceFaultCallBack USBDeviceHooker );
    ...
    

    Ich möchte nun die Funktion "BUFUSB_InstallFrameHooker()" aufrufen, um den Delegaten zu definieren. Hier ist mein Code, wie ich es versucht habe:

    ...
    
    public delegate void FrameCallbackDelegate( TProcessedDataProperty* Attributes, unsigned char *Frameptr );
    
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public: 		
    
    		FrameCallbackDelegate^ frameDelegate;
    
    		void SetCallBackStatus( int ShowNo )
    		{
    			labelTimeStamp->Text = Convert::ToString(ShowNo);
    		}
    
    		void GrabbingFrameCallback(TProcessedDataProperty* Attributes, unsigned char *Frameptr)
    		{
    			SetCallBackStatus(Attributes->TimeStamp);
    		}
    
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    
    			frameDelegate = gcnew FrameCallbackDelegate(this,&BufferedCamExample::Form1::GrabbingFrameCallback);
    		}
    
    ...
    
    private: System::Void buttonStartGrab_Click(System::Object^  sender, System::EventArgs^  e) {
    
    			 BUFUSB_InstallFrameHooker( 0, frameHooker );			 
    			 BUFUSB_StartFrameGrab(0x8888);
    		 }
    
    ...
    

    Ich bekomme vom Compiler folgende Fehlermeldung angezeigt:

    error C2664: 'BUFUSB_InstallFrameHooker': Konvertierung des Parameters 2 von 'BufferedCamExample::FrameCallbackDelegate ^' in 'FrameDataCallBack' nicht möglich
    1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist

    Muss ich hier eine Konvertierung auf den Typ "FrameDataCallBack" machen? Wenn ja, wie? Oder ist meine Vorgehensweise generell falsch? Habe zuvor noch keine direkte Berührungspunkte mit Delegates gehabt, daher hoffe ich auf eure Hilfestellung.

    Vielen Dank schon mal..
    Gruß


Anmelden zum Antworten