POS Drucker mit PointOfService ansprechen



  • Hallo

    hat schon jemand mit PointOfService unter C++\CLI gearbeitet ?

    Ich bekomme den Namespace nicht eingebunden. Wenn man das den so macht.

    using namespace Microsoft::PointOfService;
    Fehler:
    'PointOfService': Ist kein Element von 'Microsoft'
    'PointOfService': Es ist kein Namespace mit diesem Namen vorhanden

    mein Beispiel was ich habe läuft unter C# wollte ich nach C++ holen.

    Unter C#
    wird unter References Microsoft.PointOfService eingebunden
    und mit
    using Microsoft.PointOfService;
    benutzt



  • Unter C++/CLI musst Du genau das gleiche machen, wie unter C#... die _musst_ Du aber Referenz in den Projekteinstellungen einbinden!



  • Hallo

    kannst du das genauer angeben wo genau in den C++ Einstellungen man die
    Referenz abgeben muss ?

    In meinen C# Beispiel ist unter References
    Microsoft.PointOfService eingetragen
    welcher unter Eigenschaft und Path folgende Angaben hat:
    C:\Windows\assembly\GAC_MSIL\Microsoft.PointOfService\1.12.0.0__31bf3856ad364e35\Microsoft.PointOfService.dll



  • Rechts-Klick auf das projekt, dann Properties|Common Properties|Add New Reference..



  • Hallo

    hat alles geklappt, ich kann jetzt den Namespace von
    Mirosoft.PontOfService nutzten.

    Ich habe das C# in C++ umgesetz aus :

    PosPrinter m_Printer = null;
    DeviceInfo deviceInfo = null;
    string strLogicalName = "Epson-TM88";

    PosExplorer posExplorer = new PosExplorer();
    try
    {
    deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter,strLogicalName);
    m_Printer = (PosPrinter)posExplorer.CreateInstance(deviceInfo);
    }
    catch(Exception)
    {
    ChangeButtonStatus();
    return;
    }

    wurde:

    PosPrinter^ m_Printer;
    DeviceInfo^ deviceInfo;
    PosExplorer^ posExplorer = gcnew PosExplorer();

    String^ strLogicalName = "Epson-TM88";

    try
    {
    deviceInfo = posExplorer->GetDevice(DeviceType::PosPrinter,strLogicalName);
    m_Printer = (PosPrinter^)posExplorer->CreateInstance(deviceInfo);

    }
    catch(Exception^ e)
    {
    ChangeButtonStatus();
    MessageBox::Show( this, e->Message, "Init Drucker" );
    }

    es lässt sich auch alles compilieren, nur bekomme ich in C++
    immer einen Exception wenn "PosExplorer^ posExplorer = gcnew PosExplorer();"
    aufgerufen wird mit der Meldung:

    "Der Typeninitialisierer für "Mircosoft.PointOfService.Management.Explorer" hat eine Ausnahme verursacht"

    Ich habe jetzt festgestellt das in C# die Zielframework auf 2.0 festgelegt ist.
    Ich kann die Zielframework bis auf 3.5 erhöhen und es funktioniert.

    Wenn ich in C# die Zielframework auf 4.0 einstelle bekomme ich hier auch den
    Fehler bei Aufruf von: PosExplorer posExplorer = new PosExplorer(); mit der selben Meldung wie in C++.

    Kann man in C++ die Zielframework umstellen, und wo ?
    Kann man heraus finden warum es mit der Zielframework 4.0 diesen Fehler gibt ?



  • Siehe: Ändern des .NET TargetFrameworks in VS2010 für C++/CLI Projekte
    http://blog.kalmbach-software.de/de/2011/01/04/andern-des-net-targetframeworks-in-vs2010-fur-ccli-projekte/

    Um es herauszufinden, musst Du Dir die InnerException anschauen!



  • Hallo

    ok die Framework konnte ich so umstellen, sofort kommt dieser Fehler:

    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(292,5): error MSB8009: .NET Framework 2.0/3.0/3.5 wurden für das v90-Plattformtoolset konzipiert. Stellen Sie sicher, dass auf dem Computer Visual Studio 2008 installiert ist.

    Muss ich jetzt wirklich Visual Studio 2008 installieren ? oder gibt es eine andere
    Möglichkeit.

    Wieso kann ich in C# die Framework umstellen , dort kommt ja auch nicht dieser Fehler ?



  • Die Fehlermeldung der InnerException :

    + InnerException 0x0272b558 { "Diese Methode verwendet explizit die CAS-Richtlinie, die aufgrund von .NET Framework veraltet ist. Um die CAS-Richtlinie aus Kompatibilitätsgründen zu aktivieren, verwenden Sie den NetFx40_LegacySecurityPolicy-Konfigurationsschalter. Weitere Informationen finden Sie unter http://go.microsoft.com/fwlink/?LinkID=155570."} System::Exception^

    Unter http://go.microsoft.com/fwlink/?LinkID=155570 wird angeben das man:

    <configuration>
    <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
    </runtime>
    </configuration>

    einstellen soll, wo finde ich das in C++ und C# ?



  • C++/CLI benötigt die C-Runtime und somit auch den passenden Compiler. Wenn Du eine Assembly verwendest, die nur .NET 2 (bzw. 3.5) kann, so musst Du auch VS2008 verwenden bzw. dies muss auf Deinem Rechner vorhanden sein, dann kannst Du auch VS2010 verwenden, im Hintergrund wird aber VS2008 verwendet...

    Du hast nun 2 Möglichkeiten:
    1. Finde den Fehler in der Assembly und besorge Dir eine neue Version...
    2. Installiere VS2008...



  • biedego schrieb:

    Unter http://go.microsoft.com/fwlink/?LinkID=155570 wird angeben das man:
    <configuration>
    <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
    </runtime>
    </configuration>

    einstellen soll, wo finde ich das in C++ und C# ?

    Du musst eine Dateie "AppName.exe.config" in das selber Verzecihnis legen wie die Exe. Dort muss dies dann rein... Es gibt AFAIK in C++/CLI keinen Automatismus, der dies macht; so wie in C#...



  • Besten Dank, funktioniert so


Anmelden zum Antworten