Zugriff auf .res Datei
-
sry... dachte das hat was mit Dateien zu tun... naja aber ist ja für ne GUI...
So ich habe jetz hier nie *.res aber ich check LoadBitmap nicht, da gebe ich ja nich an wie die res datei heist, und auch nirgendsa das BITMAP_0 die Datei in der res ist... wie läuft das denn?
Gibts da nen kleines TUT für?
Habe mir schon viel durchgelesen aber ich komm nich ganz hinterher...
DANKE
-
man die res datei wird vom resourcen compiler in dein programm kompiliert!!!
-
@rolleAB
Falsch! Die .res-Datei ist bereits kompiliert. Sie wird vom Linker an die .Obj-Datei (kompilierte Quellcode-Datei) gebunden. Aus dem Verlinken entsteht die Exe oder dll.
-
stecks dir du neunmalkluger, ich meinte rc datei du vollpfosten. und jetzt geh wieder haare in deiner erbsensuppe suchen.
-
Danke für die ausgesuchte Freundlichkeit
:p
Wenn Du es schon nicht schaffst, das zu schreiben, was Du meinst, dann hör wenigstens auf, herum zu blöken. Unfreundlichkeit ist kein Ausgleich für Dummheit
.Außerdem ist das auch falsch. Die rc-Datei wird nicht
in Dein Programm compiliert
. Bis zur Verlinkung sind beides völlig getrennte Abläufe. Das einzige Gemeinsame ist die Resource.h-Datei
.
-
oh junge du bist dumm wie ein klotz beton. bitte erspar es uns noch länger zeuge deiner selbstmontage sein zu müssen.
-
Mal abgesehen davon das dieser dumme unreg. typ nervt:
Was hat meine res Datei, die ich über ein externes Programm erstelle, mit meinem Programm zu tun?
Ich habe eine *.c Datei und dann noch eine .res/.rc Datei... wie verbinde ich die,
wie öffne ich die .res/.rc Datei um auf mein Bild darin zuzugreifen, hat da jemand ein Tutorial?rolleAB schrieb:
man die res datei wird vom resourcen compiler in dein programm kompiliert!!!
^^ glaub ich nicht, die wird von dem resourcenBuilder erstellt...
[edit]ums nochmal klar zu machen-falls es das nicht is- ich habe /HIER/ die exe und /HIER/ die *.rc... wie kann ich auf BITMAP_0 in /HIER/bla.rc zugreifen? fopen( "bla.rc", "r"); wird da wohl nicht gehen oder?
-
Du verstehst da offensichtlich was falsch: Die rc-Datei läßt sich nur mit einem Texteditor (um die Scripte zu bearbeiten) oder einem Resourcen-Editor öffnen.
Die .rc-Datei wird mit dem Resourcen-Compiler in eine .res-Datei umgewandelt. Danach wird diese per Linker mit der .obj-Datei (compilierter Quellcode) zur Exe verlinkt. Die .res-Datei wird also nicht getrennt geöffnet, sondern ist am Ende in der .Exe (oder .dll, je nachdem) enthalten. Die Resourcen werden mithilfe der IDs abgerufen, die Du im Resourcenscript bzw. in der Resource.h-Datei ablegst. Die Resource.h muß beim Compilieren sowohl in der .rc- alsauch in der Quellcode-Datei includiert werden.
-
Ja das habe ich inzwischen auch verstanden, und mit gcc geht das acuh...
Ich habe jetzt nur ein Problem:
ich habe immer so compiliert: "gcc -o myExe myCode.c -Os -lgdi32 [-lib2 [-lib3[...]]]"
jetzt bringt mir das "-lgdi32" nichts mehr, da ich "-S" anhänge damit er bei der o datei stehen bleibt..."gcc -o iBT.exe iBT.c iBT.coff" so gehe ich inzwischen vor, er bekommt das hin nur jetzt ist mein problem: die libs...
C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x3e9): undefined ref erence to `GetStockObject@4' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x5d8): undefined ref erence to `GetObjectA@12' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x5fe): undefined ref erence to `CreateCompatibleDC@4' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x618): undefined ref erence to `SelectObject@8' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x68b): undefined ref erence to `AlphaBlend@44' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x6a0): undefined ref erence to `SelectObject@8' C:\Users\oliver\AppData\Local\Temp/ccU5baaa.o:iBT.c:(.text+0x6b2): undefined ref erence to `DeleteObject@4' collect2: ld returned 1 exit statusIch habe es mit
#pragma comment( lib, "-lgdi32" )#pragma comment( lib, "gdi32" )#pragma comment( lib, "gdi32.lib" )versucht aber immer kommt das selbe.. wieso?
Ich hoffe das wenn das funktioniert die .coff (die .res zu .coff, das das selbe wie .obj/.o ist) mit in die exe zu bringen...
[edit]habes jetzt erstmal geschafft indem ich "gcc -o iBT.exe iBT.c iBT.coff" zu "cc -o iBT.exe iBT.c iBT.coff -lgdi32 -lmsimg32 -Os" gemacht hab, das mit dem pragma würd ich aber gern ma wiwsne
[edit]
BITMAP_0 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE LANGUAGE LANG_NEUTRAL, 0 {das steht in der iBT.rc was muss ich denn mit
"myRes = FindResource( GetModuleHandle(NULL), 0, "BITMAP_0" );"
machen?Ich habe folgendes:
Kompiliere .res zu .coff erstelle .exe mit .coff Starte Programm FindResource 2 LoadResource 2 LoadBitmap 1814das ist die ausgabe... ich bekomme immer != NULL aber halt GetLastError() == 2
[nocmal]
HRSRC myRes; HGLOBAL mySource; myRes = FindResource( GetModuleHandle(NULL), TEXT("BITMAP_0"), RT_BITMAP ); if( myRes != NULL ) { printf( "FindResource %d\n", GetLastError() ); //myMen = CreatePopupMenu(); //InsertMenu( myMen, 0, MF_BYPOSITION, 1, "test" ); mySource = LoadResource( GetModuleHandle(NULL), myRes ); if( mySource != NULL ) { printf( "LoadResource %d\n", GetLastError() ); logo = LoadBitmap( GetModuleHandle(NULL), mySource ); printf( "LoadBitmap %d\n", GetLastError() ); [...]so hier noch bischen lesestoff... logo ist glob vom typ HBITMAP
-
ICH HABS ICH HABS ICH HABS!!!
HRSRC myRes; HGLOBAL mySource; myRes = FindResource( GetModuleHandle(NULL), TEXT("BITMAP_0"), RT_BITMAP ); if( myRes != NULL ) { printf( "FindResource %d\n", GetLastError() ); //myMen = CreatePopupMenu(); //InsertMenu( myMen, 0, MF_BYPOSITION, 1, "test" ); mySource = LoadResource( GetModuleHandle(NULL), myRes ); if( mySource != NULL ) { printf( "LoadResource %d\n", GetLastError() ); logo = LoadBitmap( GetModuleHandle(NULL), TEXT("BITMAP_0") ); printf( "LoadBitmap %d\n", GetLastError() );DANKE FÜR EURE GEDULT und das ihr euch mit mir abgebt xD
Ihr seid die besten"!

-
lippoliv schrieb:
Ihr seid die besten"!

Danke für das Kompliment, ist aber etwas übertrieben...

-
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //ShowWindow( GetConsoleWindow(), SW_HIDE ); //Konsole verstecken STDHANDLESTRUCT myWnd = { 0 }; MSG myWndMsg; HRSRC myRes = NULL; HGLOBAL mySource = NULL; if( NULL != (myRes = FindResource( GetModuleHandle(NULL), TEXT("BITMAP_0"), RT_BITMAP )) && NULL != (logo = LoadBitmap( GetModuleHandle(NULL), TEXT("BITMAP_0") )))//HBITMAP logo //bitmap wurde geladen{ aktInst = hInstance; wsprintf( appTitle, "%s - Write your own Bass Tabs | Version: %s", appName, VERSION ); myWnd.programIcon = NULL; if( NULL != ( myRes = FindResource( GetModuleHandle(NULL), TEXT("ICON_0"), RT_ICON ) ) && NULL != ( myIcon = LoadIcon( GetModuleHandle(NULL), TEXT("ICON_0") ) ) ) myWnd.programIcon = &myIcon; else printf( "icon not loaded %d\n", GetLastError() ); //aussehen des Forms myWnd.hInst = hInstance; myWnd.name = appName; myWnd.procedure = (WNDPROC)WndProc; myWnd.color = (HBRUSH)GetStockObject(WHITE_BRUSH); if( regStandardWnd( myWnd )&& //registrieren der Fensterklasse createMainWindow( hInstance ) ) //erstellen + anzeigen des Fensters { while( GetMessage( &myWndMsg, NULL, 0, 0 ) ) //Auf Nachricht warten(muss in jedes Windows-Programm) { TranslateMessage( &myWndMsg ); //Übersetzt von "Virtual Key" zu "Character" message DispatchMessage( &myWndMsg ); //Bearbeitet die Message(std oder nach WndProc()) } } } else printf( "!FindResource %d\n", GetLastError() ); return 0; }Die Bitmap läd er kein problem. bei dem ICON krieg ich 1814"The specified resource name cannot be found in the image file." bin ich nur zu blind?
Is doch alles gleich wie bei der Bitmap?Beide liegen im selbeen RC und die wird zur RES und dann eingebunden...
Elektronix schrieb:
Danke für das Kompliment, ist aber etwas übertrieben...
Nein ihr habt echt immer gedult mit mir, find ich total klasse!
[edit]"ICON_0 ICON
MOVEABLE PURE LOADONCALL DISCARDABLE
LANGUAGE LANG_NEUTRAL, 0
{" das ist der eintrag in der RC[edit]meine EXE hat auch das logo von dem ICON...
-
Dein Icon-ID ist mit ICON_0 identifiziert. Das ID ist per #Define in der Resource.h mit einer Integer-(bzw. Long)-Konstante belegt.
LoadIcen erwartet als 2. Parameter einen Long, Du hast einen String angegeben. Du müßtest halt als 2. Parameter die ID aus der Resourc.h angeben oder MAKEINTRESSOURCE(Icon_0) einsetzen.
-
Ok das habe ichnicht beachtet, nur welchen wert muss ich "MAKEINTRESOURCE" übergeben wenn bei mir nur im RC file steht
ICON_0 ICON MOVEABLE PURE LOADONCALL DISCARDABLE LANGUAGE LANG_NEUTRAL, 0 {? da steht ja nicht
1001 ICON_0 ICON MOVEABLE PURE LOADONCALL DISCARDABLE LANGUAGE LANG_NEUTRAL, 0 {dann würd ich ja 1001 übergeben xD...
soll ich 0 übergeben?[edit]es gibt keine resource.h
-
= LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ICON_0));
-
error: 'ICON_0' undeclared[edit]
HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName );2. != LONG
-
Man lippoliv, lies doch mal de Petzold. Es sollte eine Selbstverständlichkeit sein, daß man sich ERSTMAL gründlich informiert (Literatur gibt es wahrlich genug!) und dann bei Unklarheiten Fragen stellt. Nicht sofort drauf los stürzen, wenn man 0 Ahnung hat, was man da tut. Das nervt mich auch einfach als regelmäßiger Leser des Forums. Es verstößt gegen die Netikette, mit der es in diesem Forum leider alles andere als genau genommen wird. Einen schönen Tag noch.
-
In dem Petzold -der ja sehr bekannt ist- steht also wirklich alles drinn ja?
Ich habe um Tutorials gebeten, darauf hat keiner angesprochen, ich habe selber gesucht habe immer nur sachen gefunden die mit VC++ oder sonstwas gemacht werden, aber nicht mit C wo man wirklcih alles machen muss (RC Datei selber erstellen, sie irgendwie mitkompilieren und dann noch die Daten raussuchen[hier stimmt es mit den andern sachen überein]) und ich hatte es schon fertig, die BITMAP läuft...
Jetzt geht der ICON nicht, ich dachte es währe das selbe... Nein es ist nicht das selbe..
Wenn du mir ein Thread zeigen würdest wo ca. dieses Problem behandelt wird... währ ich dir dankbar, aber verbring nicht zuviel Zeit damit, ich bin mir sicher du findest dazu nichts.In den meistenn RCs ist der aufbau "ID_NR ELEMENT_NAME ELEMENT_TYP" und alle haben noch irgendeine resource.h [...]
Wenn ich sowas nicht habe, alles nichts... ist das dann "gegen die Nettikette" zu fragen?
Ja klar frage ich viel, aber liegt das evtl daran das "ihr" einfach nur sagt "Neuen Button ins form", "Neuen Dialog im RC" oder "x = image.width" und ich dafür ewig brauche, viel Quellcode und so, da ich soeine Umgebung -noch- nicht nutzen soll...Das ist jetzt alles nicht unfreundlich gemeint, nur komm ich mir hier langsam falsch vor, wieso gibt es nicht mal ganz Konkret ein "WinAPI - C" Forum wo wirklich alles getrennt ist, oder ein "tag" für ein Thread wo man einträgt "Programmiersprache: C"...

Ich stimme mit deinem Beitrag überein, und ich fühle mich auch nicht gerade super, hier andauernd zu fragen, nur findet man halt zu C nicht viel, zumindest nicht über Google, da alles C++/C# treffer sind.

Tortzdem danke für deine ehrlichkeit, also wenn jemand noch nen Tut zu diesem Thema hat... Bin dafür gerne offen.
[edit]ich habe keinen Petzold, werd mir den aber wohl holen müssen.
-
lippoliv schrieb:
error: 'ICON_0' undeclared[edit]
HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName );2. != LONG
Oops, hast Recht, hab was Falsches gesagt.
Dein "ICON_0" ist die ID des Icons, das einer Ineger-Zahl entspricht (in Resource.h eingesetzt). Also Du übergibst eine Zahl an einen String-Parameter. MAKEINTRESOURCE löst das Problem.Hast Du es mal damit versucht:
wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_QUESTION));(Lädt ein Standardicon)
Hier ein Tutorial, wo einiges zu Resourcen steht:
http://pronix.linuxdelta.de/C/win32/win32_4.shtml
-
#define IDI_0 1000 #define IDB_0 1001*.rc
1000 ICON MOVEABLE PURE LOADONCALL DISCARDABLE LANGUAGE LANG_NEUTRAL, 0 //und 1001 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE LANGUAGE LANG_NEUTRAL, 0(er bennent die automatisch um, dann hab ich das #inlcude wieder rausgenommen)
if( NULL != (myRes = FindResource( GetModuleHandle(NULL), MAKEINTRESOURCE( IDB_0 ), RT_BITMAP ) ) && NULL != (logo = LoadBitmap( GetModuleHandle(NULL), MAKEINTRESOURCE( IDB_0 ) ) ) )und
if( NULL != ( myRes = FindResource( GetModuleHandle(NULL), MAKEINTRESOURCE( IDI_0 ), RT_ICON ) ) && NULL != ( myIcon = LoadIcon( GetModuleHandle(NULL), MAKEINTRESOURCE( IDI_0 ) ) ) )das IDB wird angezeigt, das IDI nicht... verrückt?
Immernoch Fehler 1814[edit]war ein fehler meinerseits.. egal ist gelöst!