Home

HD.exe: kleine Optimierungen

MASM32 - Infoseite

MASM32 SDK (Windows Konsole):
Ein Icon und mehr für das ausführbare Programm mittels Ressource-Datei

Diese Seite beschreibt, wie man eine Konsolapplikation mit einem Icon ausstatten kann. Die Anzeige im Explorer sieht dann etwas hübscher aus -siehe das folgende Bild beim Eintrag „enumwin.exe”. Im folgenden Bild wird das Programm enumwin.exe mit dem Icon fach.ico hervorgehoben.
Bild: Windows-Explorer und Dateieigenschaften/Iconauswahl
Außerdem wurde eine Verknüpfung auf enumwin.exe angelegt. Im Eigenschaftsfenster werden alle drei in das Programm eingebundene Icons angezeigt, so dass man bequem bei der Verknüpfung einen abweichenden Icon aussuchen kann. Die drei Icon-Dateien sind im angezeigten Verzeichnis abgelegt. Sie können jedoch auch in anderen Verzeichnissen stehen.
Bild: Programmeigenschaften
Hier werden links die Programmeigenschaften eines beliebigen Programms aus dem Hause Microsoft angezeigt. Die meisten angezeigten Programmeigenschaften von enumwin.exe wurden dem Programm mit genau der Steuerdatei angedient, die auch die Icons eingebunden hat.
Die Steuerdatei heißt rsrc.rc. Ihre Syntax entspricht der Syntax für die Programmiersprache C: Kommentare stehen hinter zwei Bruchstrichen.
//Microsoft Developer Studio generated resource script.
//
#include "\masm32\include\resource.h"

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
500  ICON  DISCARDABLE  "fach.ico"
501  ICON  DISCARDABLE  "favicon.ico"
502  icon  discardable  "hammer.ico"

// Version

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG                // ergibt false
 FILEFLAGS 0x9L
#else
 FILEFLAGS 0x8L
#endif

 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040704b0"
        BEGIN
            VALUE "Comments", "Übungsprogramm\0"
            VALUE "CompanyName", "entfällt\0"
            VALUE "FileDescription", "Übungsprogramm / Konsolapplikation\0"
            VALUE "FileVersion", "1, 0, 0, 1\0"
            VALUE "InternalName", "Enumerate\0"
            VALUE "LegalCopyright", "Copyright © 2013 Freeware\0"
            VALUE "LegalTrademarks", "entfällt\0"
            VALUE "OriginalFilename", "Enumerate.exe\0"
            VALUE "PrivateBuild", "Fredrik Matthaei, Hamburg\0"
            VALUE "ProductName", "entfällt\0"
            VALUE "ProductVersion", "1, 0, 0, 1\0"
            VALUE "SpecialBuild", "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x407, 1200
    END
END
Bild: Microsoft Developer Studio generated resource scriptWie aus der ersten Zeile der Datei hervorgeht, war das im Bild links gezeigte Programm an der Entstehung der Datei beteiligt. Anschließend wurde die Datei mit einem normalen Texteditor vereinfacht und verschlankt.

Die Bedeutung der verwendeten Schlüsselworte lässt sich in der Datei \masm32\bin\rc.hlp nachlesen.

Der MASM32 SDK bietet eine Alternative zum Erstellen einer solchen Datei
  • unter dem Reiter „Script”
  • dann „Create sample RC-File”
  • und danach noch „Insert RC Version Control Block”.

Die generierte Datei muss man anschließend mit einem Texteditor anpassen. Sollen die weiteren Verarbeitungsschritte mit MASM32 SDK erfolgen, muss man die Datei unter dem Namen rsrc.rc in genau das Verzeichnis schreiben, in dem das Assembler-Quellprogramm steht. Das liegt daran, dass in den Skripten unter \masm32\bin der Name rsrc.rc fest eingetragen ist. Wer mag, kann die Skripte anpassen!

Der Skript \masm32\bin\bldallc.batr
Mit diesem Skript wird bei MASM32 SDK das Assemblerquellprogramm für eine Konsolapplikation assembliert und gelinkt:
@echo off

if not exist rsrc.rc goto over1
\masm32\bin\rc /v rsrc.rc
\masm32\bin\cvtres /machine:ix86 rsrc.res
:over1

if exist %1.obj del %1.obj
if exist %1.exe del %1.exe

\masm32\bin\ml /c /coff %1.asm
if errorlevel 1 goto errasm

if not exist rsrc.obj goto nores

\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj rsrc.obj
if errorlevel 1 goto errlink

dir %1.*
goto TheEnd

:nores
\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj
if errorlevel 1 goto errlink
dir %1.*
goto TheEnd

:errlink
echo _
echo Link error
goto TheEnd

:errasm
echo _
echo Assembly Error
goto TheEnd

:TheEnd

pause
Leicht ist zu erkennen, dass die Verarbeitung der Resourcesteuerdatei rsrc.rc nur ausgeführt wird, wenn sie im gleichen Verzeichnis wie die Assemblerquelldatei vorhanden ist.

Ist sie vorhanden, wird durch Aufruf von

  • \masm32\bin\rc /v rsrc.rc daraus die Datei rsrc.res generiert.
  • \masm32\bin\cvtres /machine:ix86 rsrc.res konvertiert in rsrc.obj.
Der passende Aufruf von \masm32\bin\Link bindet rsrc.obj in das ausführbare .EXE-Programm ein. Allerdings wird dadurch die .EXE-Datei ehtsprechend größer.

Letztes Upload: 30.03.2017 um 14:31:27