c.m.obrecht
 
  
  Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
  | 
		
			
				 Verfasst am: 18.11.2007, 13: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... | 
			 
		  |