Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  ConvertFromUTF8 ... in VBA7

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 25. Jun. 2013 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

erstellt am: 25. Jun. 2013 19:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd und herzlichen Dank!

Ich habe keine Ahnung, warum dein Code von damals bei mir nur Fragezeichen erzeugt hat- heute funktionierts 

Und damit ist das VBA7-Problem zumindest an dieser Stelle gelöst. Das nächste kommt bestimmt!

------------------
Klaus

www.al-ko.com | mein Gästebuch | privat... |

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz