Seite 1 von 1

p-unicode und NULL

Verfasst: 09.02.2013 13:54
von _JON_
Ist es möglich ein Null, an einen mit p-unicode oder p-ascii type zu übergeben?

Laut MSDN sollte eine MsgBox, wenn ich Null als Title übergebe den Standardtext "Fehler" setzen.
Aber PB meckert ja wenn ich keinen String benutzte :?

Code: Alles auswählen

Prototype.l ProtoMessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)

If OpenLibrary(0, "User32.dll")
    MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW")
    ;MsgBox(0, "Hello", 0)
    ;MsgBox(0, "Hello", #NUL)
    ;MsgBox(0, "Hello", #NUL$) ;keine echte null, leerer string
    ;MsgBox(0, "Hello", #NULL$)  ;keine echte null, leerer string
EndIf


Re: p-unicode und NULL

Verfasst: 09.02.2013 14:01
von RSBasic

Code: Alles auswählen

MessageBox_(0, "Message ohne Titel bzw. mit Error-Titel", 0, 0)

Re: p-unicode und NULL

Verfasst: 09.02.2013 14:18
von ts-soft
Jetzt fehlt aber noch die Beantwortung der Frage:
- Ist es möglich ein Null, an einen mit p-unicode oder p-ascii type zu übergeben?
Nein. Es wird automatisch ein Nullstring übergeben, aber niemals eine Null.

Re: p-unicode und NULL

Verfasst: 09.02.2013 14:24
von _JON_
Danke für die schnellen Antworten.

Schade das es nicht geht, fand die Pseudotypes eigentlich recht praktisch.

Re: p-unicode und NULL

Verfasst: 09.02.2013 14:46
von ts-soft
_JON_ hat geschrieben:Schade das es nicht geht, fand die Pseudotypes eigentlich recht praktisch.
Ich finde sie immer noch recht praktisch und das man mit diesen nur Strings übergeben kann, sollte
ja einleuchten. Dafür sind sie ja da :wink:
Und das Wort "Fehler" in den Titel von Windows zu setzen lassen, ist wohl etwas wo man drauf
verzichten kann.

Re: p-unicode und NULL

Verfasst: 09.02.2013 14:56
von _JON_
Naja, ob man nun eine kleine Procedere benutzt oder einfach nur den String übergibt ist doch eigentlich egal.

Das mit der MsgBox war doch nur ein Beispiel gewesen. Wird sicherlich auch sinnvollere geben.

Re: p-unicode und NULL

Verfasst: 09.02.2013 15:03
von RSBasic
Du kannst, wenn es nicht anders gehen würde, kannst du auch zweimal deklarieren:

Code: Alles auswählen

Prototype.l ProtoMessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)
Prototype.l ProtoMessageBoxWEx(Window.l, Body.p-unicode, Title, Flags.l = 0)

If OpenLibrary(0, "User32.dll")
    MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW")
    MsgBoxEx.ProtoMessageBoxWEx = GetFunction(0, "MessageBoxW")
    MsgBox(0, "Hello", "Mein Titel")
    MsgBoxEx(0, "Hello", 0)
EndIf
Du kannst dann selber aussuchen, ob du beispielsweise mit oder ohne Standard-Titel haben möchtest.

Re: p-unicode und NULL

Verfasst: 09.02.2013 15:13
von ts-soft
titel kann man auch ermitteln:

Code: Alles auswählen

Procedure.s GetLocalErrorTitle()
  Protected hInstance, result.s{255}
  hInstance = LoadLibraryEx_("user32", 0, #LOAD_LIBRARY_AS_DATAFILE)
  If hInstance
    LoadString_(hInstance, 2, @result, 255)
    FreeLibrary_(hInstance)
  EndIf
  ProcedureReturn result
EndProcedure

 Prototype.l ProtoMessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)

If OpenLibrary(0, "User32.dll")
    MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW")
    title.s = GetLocalErrorTitle()
    MsgBox(0, "bla bla", title)
EndIf


Re: p-unicode und NULL

Verfasst: 09.02.2013 15:36
von helpy
Probiert folgendes:

Code: Alles auswählen

Prototype.l ProtoMessageBoxW(Window.l, Body.p-unicode, Title.p-unicode = 0, Flags.l = 0)

Define NullString.s
Debug @NullString

If OpenLibrary(0, "User32.dll")
	MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW")
	MsgBox(0, "Hello")
	MsgBox(0, "Hello", NullString)
EndIf
String-Variablen, die nicht mit einem String befüllt werden, verweisen auf NULL!

Re: p-unicode und NULL

Verfasst: 09.02.2013 15:57
von _JON_
helpy hat geschrieben:Probiert folgendes:
String-Variablen, die nicht mit einem String befüllt werden, verweisen auf NULL!
Super, ich wusste doch, das es irgendwie möglich sein muss :bounce:

Danke