System.Runtime.InteropServices.SEHException



  • Hallo zusammen!

    Ich will mit meinem Programm auf die COM-Schnittstelle eines Prüfstandes zugreifen. Daten lesen und schreiben klappt (wenn ich es explizit sage). Ich möchte aber gerne, dass bei jedem Event automatisch mein Array gefüllt wird. Zu diesem Zweck gibt es eine Methode. Doch wenn ich sie aufrufe, kommt es zu dem im Titel beschriebenen Fehler.

    #include "Consumer.h"
    #include <stdio.h>
    #include <iostream>
    #include <string>
    
    using namespace System;
    using namespace System::Windows::Forms;
    using namespace System::Collections::Generic;
    using namespace std;
    
    void main()
    {
    	mtronix::IRepository2Ptr_repository(__uuidof(mtronix::mtronixMeasurementApp));
    	mtronix::IConsumer2Ptr_consumer(__uuidof(mtronix::mtronixMeasurementApp));
    
    DOUBLE voltageRMS;
    
    voltageRMS = _repository->registerConsumer2("station1.qIec","MPD540", _consumer);
    

    Rufe ich nun registerConsumer2 auf kommt es zum Fehler. Im Manual steht:
    *
    DWORD mtronixApp.registerConsumer2(const char *qualifiedVar, const char *domain,
    IConsumer2 consumer);

    Parameters:
    qualifiedVar The fully qualified name of the variable for
    which to register a consumer.
    domain The domain of the variable specified by
    qualifiedVar
    consumer A reference to an object implementing the
    IConsumer2 interface for which the registration
    is to be established.

    Beim Debuggen ist in customer "kein definierter Wert"

    Ich weiß nicht, wo der Fehler liegt...

    Vielen Dank!


  • Mod

    worum geht es? Abgesehen davon, dass das vermutlich C++/CLI ist (eine ganz andere Sprache als C++), ist dein Problem doch anscheinend in der Nutzung deiner Bibliothek. Dummerweise kommt als einziger brauchbarer Googletreffer zu den hier zu sehenden Bezeichnern eben dieser Thread hier heraus. Was mich zu der Vermutung bringt, dass das irgendwas Internes von dir ist. Du musst uns deinen Code schon zeigen, wenn du zu ihm Hilfe möchtest.



  • Du verwendest da nicht wirklich C++/CLI, obwohl du dein Projekt ganz offensichtlich als C++/CLI Projekt eingestellt hast.
    => Stell das mal auf normales C++ um. Dann sollte zumindest mal eine andere Exception fliegen. Und dann kann man weiter sehen.



  • Vielen Dank für die Antworten. Ich habe mich nach dem Leitfaden gehalten, der mir zugesandt worden ist.
    Hier heißt es:
    "C++ programming description
    When accessing the COM interface from a C++ program you can utilize helper classes and automatic boilerplate code generation facilities that come with VisualStudio. The following discussion assumes VisualStudio 2005, but the basic procedure is similar with earlier and later versions.
    To get access to the IRepository2 interface, you must import the type library for the Software in your code. You do this via the following statement:
    #import <c:\Program Files\E Electronics\E Software For MPD and MI\mpd_mi.exe>

    You can place this line in a header file or a CPP file. This will make the
    IRepository2 and IConsumer2 interfaces as well as the
    mtronixMeasurementApp class, as well as some other interfaces, known to your
    program."

    Nun habe ich mir ein Minimalbeispiel geschrieben, das nur die #import-Direktive und die main function enthält.

    Ich erstickte in error-Meldungen.

    Parallel dazu, habe ich das ganze noch in VB6 geschrieben. Hier lässt sich die .exe einbinden und die Bibliothek fehlerfrei benutzen. Sogar:
    [/code] VRMS(x) = mtx.registerConsumer2("station" & y & ".vRms", "MPD540", Me) 'filling array with all vRms'[code] funktioniert und alle Werte werden aktualisiert.

    Deshalb habe ich die Annahme, dass ich irgendwas nicht beachte...



  • Benutze mal als Projekttyp "Win32 Konsolenapplikation" im Visual Studio.



  • Ich habe nun die Win32 Konsolenapplikation benutzt.
    Schon bei:
    mtronix::IRepository2Ptr_repository(__uuidof(mtronix::mtronixMeasurementApp));

    kommt es zur Fehlermelung mit:
    Unbehandelte Ausnahme bei 0x75B3C42D in dataanalyse.exe: Microsoft C++-Ausnahme: _com_error bei Speicherort 0x002DFA40.

    - Ein Schritt für Schritt Debug zeigt bei:
    voltageRMS = _repository->registerConsumer2("station1.qIec","MPD540", _consumer);

    den Fehler: Der Bezeichner "consumer" liegt außerhalb des gültigen Bereichs.


Anmelden zum Antworten