Forum | | | | funkheld | allô, guten journée. j'ai cet Programme pour XPSE quelque chose modifié. et es venez toujours une Fehlermeldung. je trouver den Typ de faute pas:
wohin steckt qui ? la ligne 88 ist im XProfEd vide. KompilierenMarqueSéparation {$cleq}
Def CopyMemory(3) !"KERNEL32","RtlMoveMemory"
Declare Ende%, SendeBtn&, EndeBtn&, Edit&
Declare Groesse&, Text$, ProgHndl&, AltProc&
Declare CopyData#, EigeneDaten#
Struct SCopyData = ~COPYDATASTRUCT
Dim CopyData#, SCopyData
Window 20,20-400,400
WindowTitle "Programm2"
EndeBtn& = Create(Button,%hWnd,Beenden,105,50,70,20)
SendeBtn& = Create(Button,%hWnd,Senden,15,50,70,20)
Edit& = Create(Edit, %hWnd, , 10, 15, 170, 24)
Proc Senden
Parameters Nachricht$
With CopyData#
.dwData& = 0
.cbData& = SizeOf(Nachricht$)
.lpData& = Addr(Nachricht$)
EndWith
Sendmessage(ProgHndl&,~WM_COPYDATA,%hWnd,Addr(CopyData#))
EndProc
Proc WndProc
parameters wnd&, msg&, wparam&, lparam&
If msg&=~WM_COPYDATA
CopyMemory(CopyData#,lparam&,12)
Groesse& = CopyData#.cbData&
Dim EigeneDaten#, Groesse&
CopyMemory(EigeneDaten#,CopyData#.lpData&,Groesse&)
Text$ = String$(EigeneDaten#,0)
Dispose EigeneDaten#
EndIf
return call(AltProc&,wnd&,msg&,wparam&,lparam&)
Endproc
AltProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr(WndProc,4))
While 1
ProgHndl&=FindWindow("Programm2")
Case ProgHndl&: Break
Sleep 100
EndWhile
Usermessages ~WM_COPYDATA
WhileNot Ende%
WaitInput
If %Key = 2
Ende% = 1
ElseIf GetFocus(EndeBtn&)
Ende% = 1
ElseIf GetFocus(SendeBtn&)
Senden GetText$(Edit&)
ElseIf %umessage=~WM_COPYDATA
SetText Edit&, Text$
Endif
EndWhile
Dispo CopyData#
Fin
merci.
Gruss peter |
| | | | |
| | | Typ % alors un Int -
probablement erwartet XProfan à qui Stelle ne...aucune Int -
probablement chez Anweisungen comment cette: KompilierenMarqueSéparation Dürfte so marcher: KompilierenMarqueSéparation Nochwas: KompilierenMarqueSéparation Du zeigst pour une wProc sur une interpretierte Proc -
vais dabei de Programmabstürzen aus, la fois ici la fois là. Pour quelque chose comme avec ProcAddr
absolument sur une nProc montrer là cet nativen Funktionen APC- & threadsicher
sommes. |
| | | | |
| | | Hauptfenster Subclassing z.B. so: KompilierenMarqueSéparationdeclare owp&
cls
owp&=setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4))
waitinput
end
nProc hWnd.wndProc
Parameters wnd&,msg&,wp&,lp&
global owp&
return callWindowProc(owp&,wnd&,msg&,wp&,lp&)
oc
ou bien sans globale Variable: KompilierenMarqueSéparationcls
setWindowLong(hWnd,gwl_userData,setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4)))
tandis que 1
waitinput
Wend
end
nProc hWnd.wndProc
Paramètres wnd&,msg&,wp&,lp&
si msg&=wm_lButtonDown
exitProcess(22)
endif
return callWindowProc(getWindowLong(wnd&,gwl_userData),wnd&,msg&,wp&,lp&)
endproc
Garantiert absturzsicher.
Siehe aussi Beispiele am Ende cet Dokumentes: [...]
Hinweis:
XProfan-Fehlermeldungen-Fehlerzeile-Angabe beim Einsatz avec XPSE devrait qui la ligne dans qui dateiname.ENH-Dossier entsprechen. |
| | | | |
| | funkheld | Jup, merci. Habe je maintenant geändert. Es startet, mais friert ensuite un. Irgendwie ist cela Programme pas sur den neuesten Stand.
Woran liegt cela car eh bien? ou bien la hâte du irgendwo un Programme , wohin on données de einem la fenêtre zum anderen la fenêtre senden peux ?
merci.
Gruss peter |
| | | | |
| | | Pour cette ist qui Funktion sendMessage oui là, um données à Controls/ la fenêtre trop senden.
avec cela peux on entier pratique 3 ganzzahlige Werte übermitteln: KompilierenMarqueSéparation |
| | | | |
| | | Nachtrag:
je vois cela Du wm_copyData verwenden vouloir -
pouvoir eig. seulement Sinn si on plus que 3 Werte übermitteln voudrais comment z.B.
une Stringinhalt. wm_copyData comme UserMessage peux mais pas zuverlässig
marcher là zum la date des Auslesens de WP et LP qui données pas
plus zur Disposition stehen (doit) là qui données normal seulement so longtemps bestehen
jusqu'à qui nouvelle qui wProc erreicht hat. tu peux cependant wm_copyData-
übermittelte données dans qui wProc conservé et de là aus weiterverwenden. |
| | | | |
| | funkheld | j'ai ici quelque chose trouvé. Funktioniert pour meinen Vorstellungen..
Hiermit sende je maintenant : KompilierenMarqueSéparation {$cleq}
Declare Ende&, senden&, Dlg&,wert&
declare IsActive&, InMemory&, SizeOfMem&, hmap&, hMapView&
Dlg& = Create("Dialog", %hwnd, "Senden", 220, 190, 410, 280)
senden& = Create("Button", Dlg&, "Senden", 110, 220, 80, 30)
Ende& = Create("Button", Dlg&, "Ende", 210, 220, 80, 30)
IsActive& = 0
InMemory& = 4000
'1024 Bytes Speicher
SizeOfMem& = 1024
'Speicherbereich anlegen
hmap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'Zeiger auf Speicherbereich ermitteln
hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
'die ersten 4 Bytes erhalten das Fensterhandle
Long hMapView&,0 = %hwnd
'die nächsten 4 Bytes bleiben frei für das Fensterhandle von Programm 2
wert&=0
WhileNot @Clicked(Ende&)
WaitInput
If @Clicked(senden&)
If Long(hMapView&,4) <> 0
IsActive& = 1
Endif
dat_send
EndIf
EndWhile
End
proc dat_send
wert&=wert&+1
long hMapView&,8 = wert&
If IsActive&
sendMessage(Long(hMapView&,4),InMemory&,0,0)
endif
endproc
Hiermit wird empfangen: KompilierenMarqueSéparation {$cleq}
Déclarer IsActive&, InMemory& , Ende&, SizeOfMem&, hmap&, hMapView&
IsActive& = 0
InMemory& = 4000
Ende& = 0
'1024 Bytes grenier
SizeOfMem& = 1024
'Speicherbereich anlegen
hmap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'aiguille sur Speicherbereich ermitteln
hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
Cls
'qui zweiten 4 Bytes conservé cela Fensterhandle
Long hMapView&,4 = %hwnd
Utilisateur Messages InMemory&
whilenot Ende&
Waitinput
Si %UMessage = InMemory&
Imprimer long(hMapview&,8)
Endif
Endwhile
~UnmapViewOfFile(hMapView&)
~CloseHandle(hMapView&)
Fin
Wird cet : %UMessage chaque fois pour dem durchlauf sur "0" gesetzt et récente beschrieben chez einer neuen Übertragung ou bien bleibt chez qui ersten liaison %UMessage sur la valeur InMemory& ?
merci.
Gruss peter |
| | | | |
| | | | | | | |
| | funkheld | Jup, merci. maintenant peux je qui SendMessage erkennen bzw einordnen.
Gruss peter |
| | | | |
|
répondreOptions du sujet | 3.477 Views |
Themeninformationencet Thema hat 2 participant: |