sources.codenet.ru/file/3643/CreateLink.zip --- вот пожалуй самое страшное: Код (Text): struc GUID def { match d1-d2-d3-d4-d5, def \{ .data1 dd 0x\#d1 .data2 dw 0x\#d2 .data3 dw 0x\#d3 .data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh .data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,0x\#d5 shr 24 and 0FFh,0x\#d5 shr 16 and 0FFh,0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh \} } вот это \{ и 0x\#d я вообще не понимаю ((( я всегда юзал struct ends
Код (Text): include '%fasm%/win32wxp.inc' include '%fasm%/equates/ole32.inc' include '%fasm%/encoding/win1251.inc' section '.code' executable start: invoke ExpandEnvironmentStrings,'%SystemRoot%\notepad.exe',root,MAX_PATH invoke CoInitializeEx,NULL,COINIT_APARTMENTTHREADED invoke CoCreateInstance,CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLinkW,ISLink cominvk ISLink,SetPath,root cominvk ISLink,QueryInterface,IID_IPersistFile,IPFile cominvk IPFile,Save,'notepad.exe.lnk',FALSE exit: invoke ExitProcess,NULL section '.data' readable writeable root rd MAX_PATH ISLink IShellLinkW IPFile IPersistFile def!CLSID_ShellLink def!IID_IShellLinkW def!IID_IPersistFile Упростил
Сколько не читай об COM ничего не будет понятно какие бы слова не придумывали, параллелизм, объектные модели, понять может только тот кто знает как это работает, а это постигается только часами просиживания штанов))
Не пойму откуда юникод взялся тут! Исправил на заголовок - win32ax.inc, заменил IShellLinkW на IShellLinkA, всёравно получается 'notepad.exe.lnk' иероглифами. Я уже весь инклюд, где только можно букву A приписал толку нет. Открываю examples\usecom\usecom.asm вижу там хедер - win32a.inc, и практически такой же код, правда там имя файла не пишется. И другое дело, если мне переходить в Wide Char, то что исправлять-то, практически ничего из моих прог не работает исправлением A2W или тут в двух словах не скажешь?? Но я бы хотел в ansi оставаться желательно.
Код (Text): include '%fasm%/win64ax.inc' include '%fasm%/equates/ole32.inc' section '.code' executable start: sub rsp,8 invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\RegModule',RegModule invoke SetDllDirectory,RegModule macro reg c { invoke LoadLibrary,c mov rbx,rax invoke GetProcAddress,rbx,'DllRegisterServer' mov qword [regsvr],rax invoke regsvr invoke FreeLibrary,rbx } reg 'AudioVis.dll' reg 'GPUInterop.dll' reg 'MCMultifileWriter.dll' reg 'Mx3d_GPUInterop.dll' ;... reg 'UYVY_CC.ax' reg 'vmr9conn.ax' reg 'WAVDEST.AX' invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\Videodeluxe.exe',execute,MAX_PATH invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe',workroot,MAX_PATH invoke SHGetSpecialFolderPath,NULL,shortcut,CSIDL_PROGRAMS,NULL invoke lstrcat,shortcut,shortstr invoke CoInitializeEx,NULL,COINIT_APARTMENTTHREADED invoke CoCreateInstance,CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLinkA,ISLink cominvk ISLink,SetPath,execute cominvk ISLink,SetWorkingDirectory,workroot cominvk ISLink,SetDescription,'Videodeluxe' cominvk ISLink,QueryInterface,IID_IPersistFile,IPFile cominvk IPFile,Save,shortcut,FALSE cominvk IPFile,Release cominvk ISLink,Release exit: invoke ExitProcess,NULL section '.data' readable writeable RegModule rd MAX_PATH regsvr rq MAX_PATH shortcut rd MAX_PATH shortstr du '\Videodeluxe.lnk',NULL execute rd MAX_PATH workroot rd MAX_PATH def!CLSID_ShellLink def!IID_IPersistFile def!IID_IShellLinkA IPFile IPersistFile ISLink IShellLinkA section '.idata' import readable library kernel32,'KERNEL32.DLL',ole32,'OLE32.DLL',shell32,'SHELL32.DLL' import kernel32,\ ExitProcess,'ExitProcess',ExpandEnvironmentStrings,'ExpandEnvironmentStringsA',\ FreeLibrary,'FreeLibrary',GetProcAddress,'GetProcAddress',LoadLibrary,'LoadLibraryA',\ lstrcat,'lstrcatW',SetDllDirectory,'SetDllDirectoryA' import ole32,\ CoCreateInstance,'CoCreateInstance',CoInitializeEx,'CoInitializeEx' import shell32,\ SHGetSpecialFolderPath,'SHGetSpecialFolderPathW' Забавно! Если создавать ярлык до макроса reg то всё нормально, ежели как написано сейчас, то ярлык не создастся, что за фиговина? Кстати, в каком порядке надёжнее сохранять данные du и rd или это не важно, я впервые в юникод влез?