INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

OEM TO ANSI



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

14.11.2007, 08:29
Beitrag #11

NicoB Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2007

2011
2007
EN

66822
Deutschland
OEM TO ANSI
' schrieb:Die beiden Parameter sind von Typ String und C String Pointer.

siehe MSDN http://msdn2.microsoft.com/en-usbrary/ms647473.aspx

Parameters

lpszSrc
[in] Pointer to the null-terminated string to translate.
lpszDst
[out] Pointer to the buffer for the translated string. If the CharToOem function is being used as an ANSI function, the string can be translated in place by setting the lpszDst parameter to the same address as the lpszSrc parameter. This cannot be done if CharToOem is being used as a wide-character function.

Gruss
Roland
Ich hab die Parameter auch von dem Typ aber es funktioniert leider immer noch nicht.
Ich weiß leider nicht was ich noch falsch mache oder beachten muss. :-(
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.11.2007, 22:48
Beitrag #12

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
OEM TO ANSI
' schrieb:Versuchs mal so.
long CharToOemA(CStr lpszSrc , CStr lpszDst );

Gruss
Roland

Für mich eine gute Gelegenheit, mein VI durch RolfK zu prüfen Rolleyes

Hmm das Diagram scheint im Prinzip korrekt. Muss natürlich noch die CLN Konfiguration stimmen aber davon gehe ich bei Dir mal sicher aus Dry

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.11.2007, 23:02 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2007 23:06 von rolfk.)
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
OEM TO ANSI
' schrieb:Hab es so gemacht aber LabVIEW stürtzt immer noch ab. Hier mal mein VI

1. Windows APIs benützen praktisch immer stdcall calling convention.

2. Es wäre eine gute Idee um nach dem String Size noch ein Increment einzubauen. LabVIEW hängt an den Source String nämlich noch einen NULL Character, da dieser als C String übergeben wird. Da der Destinationstring aber aus lauter NULL Charactern besteht, bin ich mir nicht sicher ob LabVIEW hier nicht eine Optimalisierung macht und dieses Anhängen eines NULL Characters weglässt. Damit wäre der Destinationsstring aber ein Byte kürzer und hätte für den NULL Character den AnsiToOemA anfügen will, keinen Platz mehr.

Oder Du verwendest AnsiToOemBuffA. Das hat einen dritten extra length Parameter der der Funktion die Länge des Buffers für den Destinationstring mitteilt. Das ist die sicherste Variante denn je nach Codepage kann es sein dass Du plötzlich mit Multibyte Charactern zu tun bekommst die nicht mehr die gleiche Bytelänge zwischen der Ansi und Oem Codepage haben (und der Destinationsstring kann damit theoretisch langer werden dann der Sourcestring war).

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2007, 10:25
Beitrag #14

NicoB Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2007

2011
2007
EN

66822
Deutschland
OEM TO ANSI
' schrieb:1. Windows APIs benützen praktisch immer stdcall calling convention.

2. Es wäre eine gute Idee um nach dem String Size noch ein Increment einzubauen. LabVIEW hängt an den Source String nämlich noch einen NULL Character, da dieser als C String übergeben wird. Da der Destinationstring aber aus lauter NULL Charactern besteht, bin ich mir nicht sicher ob LabVIEW hier nicht eine Optimalisierung macht und dieses Anhängen eines NULL Characters weglässt. Damit wäre der Destinationsstring aber ein Byte kürzer und hätte für den NULL Character den AnsiToOemA anfügen will, keinen Platz mehr.

Oder Du verwendest AnsiToOemBuffA. Das hat einen dritten extra length Parameter der der Funktion die Länge des Buffers für den Destinationstring mitteilt. Das ist die sicherste Variante denn je nach Codepage kann es sein dass Du plötzlich mit Multibyte Charactern zu tun bekommst die nicht mehr die gleiche Bytelänge zwischen der Ansi und Oem Codepage haben (und der Destinationsstring kann damit theoretisch langer werden dann der Sourcestring war).

Rolf Kalbermatter
Vielen Dank für die Unterstützung, an stdcall hat es gelegen. Jetzt funktioniert es.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.11.2007, 10:46
Beitrag #15

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
OEM TO ANSI
' schrieb:Vielen Dank für die Unterstützung, an stdcall hat es gelegen. Jetzt funktioniert es.

Trotzdem Punkt zwei nicht vergessen. Auch wenn es zu laufen scheint heisst das noch lange nicht dass die Funktion nicht ein Byte mehr in den Buffer schreibt als dass LabVIEW an die Funktion mitgibt. Und solche off by 1 Byte Fehler können lange ohne sichtbare Auswirkung sein, aber leise im Hintergrund allerlei Dinge korrumpieren, bis dann entweder LabVIEW irgendwann abstürzt, oder noch gemeiner, Du bei einem Abspeichern eines angepassten VIs, korrumpierte Datenstrukturen auf die Disk schreibst und Dein VI beim nächsten Mal nicht mehr geladen werden kann.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: