Seite 2 von 3

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 08:58
von dige
Kann man die Dll auch ohne Unicode laden? Oder geht sows nicht?
Zumindest crasht der nachfolgende Code (compiliert ohne UniCode)

Code: Alles auswählen

Prototype  idna_decode(a, b, c, d, e, f)
Prototype  idna_encode(a, b, c, d, e, f)

Global idna_decode.idna_decode
Global idna_encode.idna_encode

Procedure.i idna_LoadDLL()
  Protected hDLL.i

  hDLL = OpenLibrary(#PB_Any, "idna.dll")
  If hDLL <> 0
    idna_decode = GetFunction(hDLL, "decode")
    idna_encode = GetFunction(hDLL, "encode")
    ProcedureReturn hDLL
  EndIf

  ProcedureReturn #False
EndProcedure

Define.s dummy.s = "email@café.org"
Define.i mem

Procedure MakeUnicode(original.s, *converted.String)
  *converted\s=Space(2*Len(original.s))
  MultiByteToWideChar_(#CP_ACP,0,@original,Len(original),@*converted\s,Len(*converted\s))
  ProcedureReturn
EndProcedure 

converted.String
MakeUnicode(dummy, @converted)

If idna_LoadDLL()
  idna_encode(0, 0, @converted, 0, 0, 0) 
  MessageRequester( "IDNA Encoded", PeekS(@converted))
Else
  MessageRequester( "Error", "idna.dll not found" )
EndIf

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 09:07
von xXRobo_CubeXx
Warum ohne Unicode? Neuere PB Versionen haben nur noch Unicode
http://www.purebasic.fr/blog/?p=452 !!!

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 09:12
von dige
Yap, aber ich will das in ein CGI Modul einbauen und das geht nur ohne UC..

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 10:39
von Bisonte
und wie ist es mit dem Pseudo-Types ? Die DLL Aufrufe per Prototype herstellen oder im Speicher die Strings umwandeln sollte eigentlich funktionieren.

Hast du eine Quelle für die DLL ?

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 11:13
von dige
Der Quellecode liegt im Zip-Archiv bei. Mit Pseudotypes kenne ich mich nicht
so richtig aus :-\ ... hatte aber mal was mit .p-unicode probiert. Führte immer zu IMAs...

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 11:25
von xXRobo_CubeXx
Was sind "IMAs"?

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 11:27
von RSBasic
Invalid Memory Access, also ungültiger Speicherzugriff.

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 12:45
von ts-soft

Code: Alles auswählen

Prototype  idna_decode(a, b, c.p-Unicode, d, e, f)
Prototype  idna_encode(a, b, c.p-Unicode, d, e, f)

Global idna_decode.idna_decode
Global idna_encode.idna_encode

Procedure.i idna_LoadDLL()
  Protected hDLL.i

  hDLL = OpenLibrary(#PB_Any, "idna.dll")
  If hDLL <> 0
    idna_decode = GetFunction(hDLL, "decode")
    idna_encode = GetFunction(hDLL, "encode")
    ProcedureReturn hDLL
  EndIf

  ProcedureReturn #False
EndProcedure

Define.s dummy.s = "email@café.org"
; Define.i mem

; Procedure MakeUnicode(original.s, *converted.String)
;   *converted\s=Space(2*Len(original.s))
;   MultiByteToWideChar_(#CP_ACP,0,@original,Len(original),@*converted\s,Len(*converted\s))
;   ProcedureReturn
; EndProcedure
; 
; converted.String
; MakeUnicode(dummy, @converted)

If idna_LoadDLL()
  idna_encode(0, 0, dummy.s, 0, 0, 0)
;  MessageRequester( "IDNA Encoded", PeekS(@converted))
Else
;  MessageRequester( "Error", "idna.dll not found" )
EndIf
Nicht getested, aber sollte so funktionieren!

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 13:41
von C h r i s :)
Nicht getested, aber sollte so funktionieren!
schrei uns doch nicht so an :)

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 13:48
von NicTheQuick
C h r i s :) hat geschrieben:
Nicht getested, aber sollte so funktionieren!
schrei uns doch nicht so an :)
:?

Hast du sonst nichts beizutragen?