Foro | | | | funkheld | ¡Hola, guten Tag. Yo habe dieses Programa para XPSE algo verändert. Und lo kommt siempre ni Fehlermeldung. Yo encontrar el Typ de Fehler no:
Wo steckt el ? Línea 88 es en el XProfEd leer. KompilierenMarcaSeparación {$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#
End
Gracias.
Gruss peter |
| | | | |
| | | Typ % Así que una Int -
vermutlich esperado XProfan a el Punto kein Int -
vermutlich en Anweisungen como esta: KompilierenMarcaSeparación Dürfte así trabajo: KompilierenMarcaSeparación Nochwas: KompilierenMarcaSeparación Usted zeigst para una wProc en una interpretierte Proc -
gehe esta de Programmabstürzen de, veces hier veces como. Für algo como con ProcAddr
necesariamente en una nProc zeigen como esta nativen Características APC- & threadsicher
son. |
| | | | |
| | | Ventana principal Subclassing z.B. así: KompilierenMarcaSeparacióndeclare 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
oder sin globale Variable: KompilierenMarcaSeparacióncls
setWindowLong(hWnd,gwl_userData,setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4)))
mientras que 1
waitinput
wend
end
nProc hWnd.wndProc
Parámetros wnd&,msg&,wp&,lp&
if msg&=wm_lButtonDown
exitProcess(22)
endif
volver callWindowProc(getWindowLong(wnd&,gwl_userData),wnd&,msg&,wp&,lp&)
ENDPROC
Garantiert absturzsicher.
Siehe auch Beispiele al Ende dieses Dokumentes: [...]
Referencia:
XProfan-Fehlermeldungen-Fehlerzeile-Angabe beim Einsatz con XPSE debería el Línea en el dateiname.ENH-Expediente entsprechen. |
| | | | |
| | funkheld | Jup, danke. Posesiones Yo ahora geändert. Lo startet, aber friert entonces una. Irgendwie es el Programa no en el neuesten Stand.
Woran liegt el porque nun? Oder hast du irgendwo una Programa , wo uno Daten de una Ventana para otro Ventana senden kann ?
Gracias.
Gruss peter |
| | | | |
| | | Dafür Es el Función sendMessage sí como, en Daten a Controls/ Ventana a senden.
Damit puede ser bastante praktisch 3 ganzzahlige Werte übermitteln: KompilierenMarcaSeparación |
| | | | |
| | | Apéndice:
Yo sehe el Usted wm_copyData uso möchtest -
macht eig. sólo Sinn si uno más que 3 Werte übermitteln möchte como z.B.
una Stringinhalt. wm_copyData como UserMessage kann pero no zuverlässig
trabajo como para Zeitpunkt des Auslesens de WP y LP el Daten no
mehr disponible posición (necesario) como el Daten normal sólo así largo bestehen
a el Nachricht el wProc erreicht ha. Usted puede sin embargo wm_copyData-
übermittelte Daten en el wProc obtener y de hay de weiterverwenden. |
| | | | |
| | funkheld | Yo habe hier algo gefunden. Funktioniert después de media Vorstellungen..
Hiermit sende Yo ahora : KompilierenMarcaSeparación {$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 se empfangen: KompilierenMarcaSeparación {$cleq}
Declarar IsActive&, InMemory& , Ende&, SizeOfMem&, hmap&, hMapView&
IsActive& = 0
InMemory& = 4000
Ende& = 0
'1024 Bytes Speicher
SizeOfMem& = 1024
'Speicherbereich invertir
hmap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'Zeiger en Speicherbereich ermitteln
hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
Cls
'el zweiten 4 Bytes obtener el Fensterhandle
Largo hMapView&,4 = %hwnd
Mensajes del usuario InMemory&
whilenot Ende&
Waitinput
If %UMessage = InMemory&
Imprimir long(hMapview&,8)
Endif
EndWhile
~UnmapViewOfFile(hMapView&)
~CloseHandle(hMapView&)
End
Wird esta : %UMessage jedesmal después de el durchlauf en "0" gesetzt y neu beschrieben en uno neuen Übertragung oder restos en ersten Verbindung %UMessage en valor InMemory& ?
Gracias.
Gruss peter |
| | | | |
| | | | | | | |
| | funkheld | Jup, danke. Jetzt kann Yo el SendMessage erkennen o einordnen.
Gruss peter |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 2 subscriber: |