LabVIEWForum.de - OEM TO ANSI

LabVIEWForum.de

Normale Version: OEM TO ANSI
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Wo finde ich eine Funktion um OEM zu ANSI zu konvertieren?

Danke
' schrieb:Wo finde ich eine Funktion um OEM zu ANSI zu konvertieren?

Danke

Windows API: MultiByteToWideChar() und dann zurück WideCharToMultiByte()

Rolf Kalbermatter
Hier die VIs (sollten passen).

eg

(VIs LV 8.0)
' schrieb:Hier die VIs (sollten passen).

eg

Mit kleinen (grossem) Fehler! Die length Parameter sind alle int gemäss MSDN und das ist 32 Bit und nicht 16 Bit unter Windows 32 Bit. Die 16 Bit Zeiten sind schon lang vorbei und 64 Bit steht vor der Tür! Auch UINT ist 32 Bit und nicht 16 Bit. LPWSTR lpWideCharStr und die anderen Widechar Buffer ist jeweils ein Array von 16 Bit Charactern, nicht 8 Bit und die damit enhergehenden Längen sind in Charactern.

Last but not least, wenn Du den Multibytestring als Array of Bytes übergibst fügt LabVIEW nicht automatisch ein NULL Byte an, und ist damit -1 als Längenangabe ungültig. und wenn MultibyteToWidechar eine explizite Multibytelänge mitbekommt die den (in diesem Fall nicht vorhandenen NULL Character nicht enthält) enthält der resultierende WideCharString auch keinen NULL Character und ist damit -1 als Längenangabe in WideCharToMultiByte auch ungültig.

Rolf Kalbermatter
Im Visual Studio gibt es doch die Funktionen AnsiToOem und OemToAnsi, kann man diese nicht über .Net in LabVIEW aufrufen.
Bzw. machen die Funktionen MultiByteToWideChar() ... das gleiche?
Und wie füge ich diese in LabVIEW richtig ein?
' schrieb:Im Visual Studio gibt es doch die Funktionen AnsiToOem und OemToAnsi, kann man diese nicht über .Net in LabVIEW aufrufen.
Bzw. machen die Funktionen MultiByteToWideChar() ... das gleiche?
Und wie füge ich diese in LabVIEW richtig ein?

AnsiToOem und OemToAnsi werden wohl 99% sicher auf Basis von MultiByteToWideChar() und viceversa implementiert sein. Bemühung von .Net erscheint mir zumindest überflussig so in diesem Fall auch eventuel nicht equivalent zu den VisualStudio Funktionen.

Besser wäre dann wohl gleich die Verwendung von CharToOemA() oder CharToOemBuffA() in user32.dll.

Rolf Kalbemratter
' schrieb:AnsiToOem und OemToAnsi werden wohl 99% sicher auf Basis von MultiByteToWideChar() und viceversa implementiert sein. Bemühung von .Net erscheint mir zumindest überflussig so in diesem Fall auch eventuel nicht equivalent zu den VisualStudio Funktionen.

Besser wäre dann wohl gleich die Verwendung von CharToOemA() oder CharToOemBuffA() in user32.dll.

Rolf Kalbemratter
Danke hab die Funktion gefunden.
LabVIEW stürzt aber ab sobald ich sie aufrufe.
Mein Prototyp sieht so aus: void CharToOemA(CStr arg1, CStr arg2);
Wie sollte er aussehen?
' schrieb:Danke hab die Funktion gefunden.
LabVIEW stürzt aber ab sobald ich sie aufrufe.
Mein Prototyp sieht so aus: void CharToOemA(CStr arg1, CStr arg2);
Wie sollte er aussehen?

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
' 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
Hab es so gemacht aber LabVIEW stürtzt immer noch ab. Hier mal mein VI
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
Seiten: 1 2
Referenz-URLs