![]() |
OEM TO ANSI - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: ActiveX & .Net (/Forum-ActiveX-Net) +---- Thema: OEM TO ANSI (/Thread-OEM-TO-ANSI) Seiten: 1 2 |
OEM TO ANSI - NicoB - 14.11.2007 08:29 ' schrieb:Die beiden Parameter sind von Typ String und C String Pointer.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. :-( OEM TO ANSI - rolfk - 14.11.2007 22:48 ' schrieb:Versuchs mal so. Hmm das Diagram scheint im Prinzip korrekt. Muss natürlich noch die CLN Konfiguration stimmen aber davon gehe ich bei Dir mal sicher aus ![]() Rolf Kalbermatter OEM TO ANSI - rolfk - 14.11.2007 23:02 ' 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 OEM TO ANSI - NicoB - 15.11.2007 10:25 ' schrieb:1. Windows APIs benützen praktisch immer stdcall calling convention.Vielen Dank für die Unterstützung, an stdcall hat es gelegen. Jetzt funktioniert es. OEM TO ANSI - rolfk - 16.11.2007 10:46 ' 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 |