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 vorhandenmein 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