| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: ConvertFromUTF8 ... in VBA7 (2433 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 25. Jun. 2013 15:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo Freunde, SolidWorks hat uns mit der Einführung von VBA7 in Solidworks 2013 ein schönes Ei gelegt, die Hälfte der Makros funktioniert nicht mehr oder nicht mehr wie gewohnt. Dabei ist das so überflüssig wie ein Kropf... Mein konkretes Problem: Ich habe ein Makro, das u.a. eine Textdatei beim Einlesen nach UTF8 konvertiert. Die Lösung dazu stammt von hier:Wie konvertiere ich eine VB-Zeichenkette nach UTF-8 oder zurück? und funktionierte mit VBA6 sehr gut. Siehe auch Beitrag hier Jetzt mit VBA7 steh ich auf dem Schlauch- nichts geht mehr. Ich weiß ja, dass ich die "Declare Function ..."- Anweisung erweitern muss zu "Declare PtrSafe Function ...". Außerdem ist VarPtr in VBA6 ein Long, in VBA7 ein LongPtr (Was immer das ist). Aber damit verließen sie ihn... Mein bisheriger VBA6-Code (hab hoffentlich nix vergessen): Code: Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _ ByVal CodePage As Long, _ ByVal dwFlags As Long, _ ByVal lpWideCharStr As Long, _ ByVal cchWideChar As Long, _ ByVal lpMultiByteStr As Long, _ ByVal cbMultiByte As Long, _ ByVal lpDefaultChar As Long, _ ByVal lpUsedDefaultChar As Long) As Long Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _ ByVal CodePage As Long, _ ByVal dwFlags As Long, _ ByVal lpMultiByteStr As Long, _ ByVal cbMultiByte As Long, _ ByVal lpWideCharStr As Long, _ ByVal cchWideChar As Long) As Long Private Const CP_UTF8 As Long = 65001'... Sub ProcessDrawing() Dim strBuffer As String '... 'hier wird die Datei gelesen und in UTF8 umgewandelt: strBuffer = ReadUTF8File(ParametersFile) '... end Sub Private Function ReadUTF8File(ByRef FileName As String) As String Dim FileNumber As Integer Dim Buffer() As Byte FileNumber = FreeFile Open FileName For Binary Access Read As #FileNumber ReDim Buffer(0 To LOF(FileNumber) - 1) Get #FileNumber, , Buffer Close #FileNumber ReadUTF8File = ConvertFromUTF8(Buffer) End Function Private Function ConvertFromUTF8(ByRef Source() As Byte) As String Dim Size As Long Dim Pointer As Long Dim Length As Long Dim Buffer As String Size = UBound(Source) - LBound(Source) + 1 Pointer = VarPtr(Source(LBound(Source))) Length = MultiByteToWideChar(CP_UTF8, 0, Pointer, Size, 0, 0) Buffer = Space$(Length) MultiByteToWideChar CP_UTF8, 0, Pointer, Size, StrPtr(Buffer), Length ConvertFromUTF8 = Buffer End Function '... Ich hoffe, mir kann hier jemand weiter helfen
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... |  [Diese Nachricht wurde von KMassler am 25. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bst Mitglied
 
 Beiträge: 192 Registriert: 31.08.2004
|
erstellt am: 25. Jun. 2013 19:24 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hi Klaus, probiere nochmals die Variante FromUTF8String von dort. Die hat bei mir funktioniert und benötigt keinerlei externe Routinen. Beachte dass ich dort Mid(s,4) benutzt hatte da ich davon ausging dass die ersten 3 Zeichen BOM - http://de.wikipedia.org/wiki/Byte_Order_Mark - sind und dass auch Debug.Print nur normale Zeichen darstellen kann. D.h. schreibe das Ergebnis mal besser in eine Excel-Zelle. Wenn das nicht geht poste mal im Anhang so eine UTF-8 Datei her. cu, Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 26. Jun. 2013 10:02 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |