c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 18.11.2007, 14:13 Titel: MASM32 - Strings und Speicher reservieren GELÖst! :) |
|
|
Habe das Problem gelöst! Durch einen Versuch, ich glaubte nicht ernsthaft dass das wirklich geht; und zwar so: open1 db "open ", 255 dup(?),0
juhui
So, da bin ich wieder Habe ja vor einiger Zeit ein Programm in ASM angefangen und hatte das Problem dass bei einer Stringkonkatenation mit 3 Strings das Programm immer abstürzte. Mittlerweile ist mir plötzlich eingefalen wieso; es ist ja so logisch!! Es werden Strings definiert und an diese soll dann etwas angehängt werden, aber natürlich ist dann zuwenig Speicher reserviert. Wie lässt sich das Problem lösen? mit DUP wüsste ich dabei nicht wie dass der String dennoch den richtigen Inhalt hat. Es ist für die mciSendString-Funktion und soll den String mit dem Dateinamen bilden also z.B. "open c:\eigene~1\meinem~1\eluveitie.wma alias MyAlias" Hier die relevanten Codeausschnitte:
Deklarationen:
Code: |
open1 db "open ",0
open2 db " alias MyAlias",0
|
und vom Öffnen-Dialog:
Code: |
szFileName db 260 dup(0)
|
und die Routine:
Code: |
.if wParam == 1001
; --------------------------------------
; szFileName is defined in Filedlgs.asm
; --------------------------------------
mov szFileName[0],0 ; set 1st byte to zero
invoke GetFileName,hWin,SADD("Open A File"),
SADD("All files",0,"*.*",0)
cmp szFileName[0],0 ; zero if cancel pressed in dlgbox
je @F
Start:
lea esi, open1
FindLastByte:
lodsb
Or al, al
jnz FindLastByte
dec esi
mov edi, esi
lea esi, szFileName
CatStrings:
lodsb
Or al, al
jz Done
stosb
jmp CatStrings
Done:
mov al, 0
stosb
;Start:
lea esi, open1
FindLastByte2:
lodsb
Or al, al
jnz FindLastByte2
dec esi
mov edi, esi
lea esi, open2
CatStrings2:
lodsb
Or al, al
jz Done2
stosb
jmp CatStrings2
Done2:
mov al, 0
stosb
invoke MessageBox,hWin,ADDR open1,ADDR szDisplayName,MB_OK
|
GetShortFilename wird noch eingebaut. _________________ ...längre blomstre gamle nord... |
|