Icons und Icons Groups in dll packen
-
Leider hilft mir das nicht weiter. Also mag sein das der Tip richtig ist nur such mal Resource in der Suche.
Ich werd nicht schlau draus. Ab und Zu steht da mal was ,was passen könnte aber dann ist das VS und das hab ich nicht.
Meine DLL lässt sich auch net Registrieren. (Manuell) da kommt dann immer DLLRegisterServer nicht gefunden oder sowas.
Ich will doch nur ne DLL mit ein paar Icons drinn. ist ja schwieriger wie die anwendung selbst
---- für mich.Wenn jemand noch was weis dann immer her damit.
-
Also, ich hab es auch schon gescafft alle möglichen ressourcen in pe-dateien hinzuzufügen, aber bei icons ist mir das noch nicht gelungen.
Von daher würde mich eine lösung auch interessieren.
-
Also --- Ich hab das gerade unglaublicher Weise hinbekommen.
Aaaaaaber mit nem Externen Tool. Resource Builder
Mit dem kann man bequem die Res datei erstellen und diese dann im Builder dll Projekt hinzufügen und die dll erstellen.
und schwupps sind die Icons ganz normal Drinn.Kann sowas denn der Builder 2007 nicht selbst ? Denn das tool ist halt net umsonst nur ne Testversion.
und der Fehler beim Registrieren kommt immer trotzdem noch. Da muss noch bestimmt was in die dll hinein. Es sollen von mir aus nur bilder und icons sein nichts anderes.
Wenn jemand was weis dann behaltet das nicht für euch --- ich bin gerade so im Erfolgsrausch
-
das hier ist das winapi forum, was weiss ich was builder 2007 sein soll. frag das im builder 2007 forum. bei vc gibts nen resource editor, mit dem man das bequem machen kann.
-
asdca:
Mal im ernst seit Wochen bewege ich mich hier im Forum hin und her. Ich stelle Fragen wenn ich was nicht weis und beantworte auch sachen wenn ich mal was weis.
Du bist mir schon oft aufgefallen aber leider negativ mit kommentaren die nicht sein müssen.das hier ist das winapi forum, was weiss ich was builder 2007 sein soll. frag das im builder 2007 forum.
Sorry das ich dein WinApi Forum betreten habe als dreckiger builder2007 Nutzer. Wie konnt ich nur.
Wenn du was weist dann schreibe, ansonsten lass es. Es ist eine Community und wenn Fragen von Anfängern die es halt nicht wissen lästig sind dann gäbe es keine Community.
Wie du sicherlich in meinem ersten Post sehen müsstest wusste ich bis dato garnicht das es sowas wie einen Source Builder gibt bzw überhaupt nicht wie man das macht.
Eine DLL mit Icons erstellen muss ja nicht Builder abhängig sein. Das es da im nachhinein doch unterschiede gibt wusste ich vorher nicht. Meine Wahrsagerin hat gerade Urlaub. :pViele andere hier im Board versuchen echt zu helfen mit echt hilfreichen Vorschlägen und das machen die in Ihrer Freizeit dafür bin ich sehr Dankbar. Deshalb Ärgern mich solch nutzlosen Kommentare
Wollt ich mal loswerden
-
lol.
1.poste ich erst seit gestern, wie will ich dir da schon seit wochen negativ auffallen, du holzklotz mit ohren?
und 2.gibt es hier extra foren für irgendwelche builder oder ansonsten stopf es ins IDE und Compiler Forum aber sicher ned ins Winapi forum. ich hab dir sogar noch die lösung gesagt, wenn du zu DLL+resource nix auf google oder in der sufu findest, biste eh zu blöd, also mach mich ned an alles klar? ok.
-
asdca schrieb:
lol.
1.poste ich erst seit gestern, wie will ich dir da schon seit wochen negativ auffallen, du holzklotz mit ohren?
und 2.gibt es hier extra foren für irgendwelche builder oder ansonsten stopf es ins IDE und Compiler Forum aber sicher ned ins Winapi forum. ich hab dir sogar noch die lösung gesagt, wenn du zu DLL+resource nix auf google oder in der sufu findest, biste eh zu blöd, also mach mich ned an alles klar? ok.
Wenn du erst seit gestern postest ist es zufall mit dem namen aber macht es noch schlimmer.
Zu den Restlichen Kommentaren sag ich mal nix. Bin 30 und über solche Sachen hinweg. Kinderkram.Ich meine einfach das solche Kommentare nicht in so ein Forum gehören. Selbst wenn der Post im falschen Board ist. Klar ?
-
nein, nix klar.
das ist eine frage der höflichkeit und wenn du schon seit wochen! hier postest und immer noch ned weißt in welches forum welche beiträge gehören, ist das in der tat ein armutszeugnis das seines gleichen sucht. recherchiere gefälligst erst selbst, stell vernünftige fragen im richtigen forum, dann kriegste auch vernünftige antworten, klar?
-
Habe mich seit wochen ja nicht mit dll´s beschäftigt.
und das mit den Dll´s und das Registrieren der Dll´s dachte ich das ich hier richtig bin den im Borland Forum ist es ja auch net wirklich passend.
ich kann ja den Thread nicht aufteilenHöfflichkeit du sagst es --- Sieh dir mal deine posts an.
-
wenn du das ganze selbst (ohne externe programme, also mit api funktionen) machen willst, ist das das richtige Forum und bitte hört auf hier rumzuspammen.
Das ist was ich dazu herausgefunden habe:
wenn man eine icondatei in eine pe-datei bekommen möchte, muss man alle im icon enthaltene bilder seperat als iconresource hinzufügen und eine icongruppe erstelen, die diese bilder referenziert.
Die schlüsselbefehle hierzu sind:BeginUpdateResource
UpdateResource (jeweils einmal pro im icon enthaltenen bild mit RT_ICON als 2. parameter)
UpdateResource (mit RT_GROUP_ICON als typ um zu definieren, welche bilder zu dieser iconresource gehören)
EndUpdateResourceAllerdings habe ich es weder hinbekommen, die einzelnen iconsbilder zu kopieren, und auch nicht die gruppe richtig anzulegen.
Wenn ich mir das File mit einem ressourceneditor anschaue, sieht das ganze komisch aus.Vielleicht kann mal jemand ein bespiel posten.
hier mal mein Code:
(das anze sollte ein programm werden, dass eine exe erzeugt, die ein anderes Prgramm mit bestimmten parametern startet.
Der zu erzeugende launcher ist als ressource in diesem Programm und wird als eigene Datei abgespeichert und anschließend sollen dessen ressourcen angepasst werden (eigenes Icon, zu startendes Program, Programparameter)createLauncher.exe myprogLaunch.exe myicon.ico myProg.exe /abc '.'
erzeugt also eine kleine launcher Anwendung (name: myprogLaunch.exe, symbol: myicon.ico), die das Programm myProg.exe mit den Parameter /abc aufruft und das ausführungsverzeichnis auf '.' setzt.
Wichtig ist eigendlich nur der Teil zwischen BeginUpdateResource und EndUpdateResource// CreateLauncher.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include "resource.h" #pragma pack(push, 2) struct IconFileDirEntry { BYTE Width; ///< width of image BYTE Height; ///< height of image BYTE Colors; ///< 0 means 256 or more BYTE Reserved; ///< reserved WORD Planes; ///< number of planes WORD BitsPerPixel; ///< bits per pixel DWORD ImageSize; ///< size of image data DWORD ImageOffset; ///< offset of image data inside file }; struct IconFile { WORD Reserved; ///< reserved WORD Type; ///< 1 means icon, 2 means cursor WORD ImageCount; ///< number of images stored inside the file IconFileDirEntry IconDir[0]; }; struct IconGroupDirEntry { BYTE Width; ///< width of image BYTE Height; ///< height of image BYTE Colors; ///< 0 means 256 or more BYTE Reserved; ///< reserved WORD Planes; ///< number of planes WORD BitsPerPixel; ///< bits per pixel DWORD ImageSize; ///< size of image data WORD ImageResID; ///< Resource ID of image }; struct IconGroup { WORD Reserved; ///< reserved WORD Type; ///< 1 means icon, 2 means cursor WORD ImageCount; ///< number of images stored IconGroupDirEntry IconDir[0]; }; int _tmain(int argc, _TCHAR* argv[]) { //if(argc<5) // printf("usage: CreateLauncher.exe outFile iconfilename programname programparam programExDir\n"); HRSRC hResource; HGLOBAL hResourceLoaded; LPBYTE lpBuffer; hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_101), RT_RCDATA); if (NULL != hResource) { hResourceLoaded = LoadResource(NULL, hResource); if (NULL != hResourceLoaded) { lpBuffer = (LPBYTE) LockResource(hResourceLoaded); if (NULL != lpBuffer) { DWORD dwFileSize, dwBytesWritten; HANDLE hFile; dwFileSize = SizeofResource(NULL, hResource); hFile = CreateFile(argv[1], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE != hFile) { WriteFile(hFile, lpBuffer, dwFileSize, &dwBytesWritten, NULL); CloseHandle(hFile); HANDLE hSResource = BeginUpdateResource(argv[1],false); HANDLE hiconFile; DWORD dwFileSize, dwBytesRead; LPBYTE lpBuffer; hiconFile = CreateFile(argv[2], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE != hiconFile) { BOOL res; dwFileSize = GetFileSize(hiconFile, NULL); lpBuffer = new BYTE[dwFileSize]; if (ReadFile(hiconFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE) { IconFile* iconfile = (IconFile*)lpBuffer; DWORD headerSize = sizeof(IconGroup) + iconfile->ImageCount * sizeof(IconGroupDirEntry); IconGroup* iconGroup = (IconGroup*) new BYTE[headerSize]; iconGroup->Reserved = iconfile->Reserved; iconGroup->ImageCount = iconfile->ImageCount; iconGroup->Type = iconfile->Type; for(int i=0; i< iconfile->ImageCount; ++i) { res = UpdateResource(hResource, RT_ICON, MAKEINTRESOURCE(i+1), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), lpBuffer + iconfile->IconDir[i].ImageOffset, iconfile->IconDir[i].ImageSize); iconGroup->IconDir[i].BitsPerPixel = iconfile->IconDir[i].BitsPerPixel; iconGroup->IconDir[i].Colors = iconfile->IconDir[i].Colors; iconGroup->IconDir[i].Height = iconfile->IconDir[i].Height; iconGroup->IconDir[i].ImageSize = iconfile->IconDir[i].ImageSize; iconGroup->IconDir[i].Planes = iconfile->IconDir[i].Planes; iconGroup->IconDir[i].Reserved = iconfile->IconDir[i].Reserved; iconGroup->IconDir[i].Width = iconfile->IconDir[i].Width; iconGroup->IconDir[i].ImageResID = i+1; } res = UpdateResource(hSResource, RT_GROUP_ICON, MAKEINTRESOURCE(200), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),iconGroup, headerSize ); delete[] iconGroup; size_t s1Len = wcslen(argv[3]); size_t s2Len = wcslen(argv[4]); size_t s3Len = wcslen(argv[5]); size_t stblSize = s1Len + s2Len + s3Len + 3* 2; wchar_t* buff = new wchar_t[stblSize]; wchar_t* s1Start = buff; wchar_t* s2Start = s1Start + 1 + s1Len+1; wchar_t* s3Start = s2Start + 1 + s2Len+1; wchar_t* s4Start = s3Start + 1 + s3Len+1; s1Start[0] = s1Len + 1 ; s2Start[0] = s2Len + 1 ; s3Start[0] = s3Len + 1 ; s2Start[-1] =0; s3Start[-1] =0; s4Start[-1] =0; memcpy(s1Start+1, argv[3], s1Start[0]*sizeof(wchar_t)); memcpy(s2Start+1, argv[4], s2Start[0]*sizeof(wchar_t)); memcpy(s3Start+1, argv[5], s3Start[0]*sizeof(wchar_t)); UpdateResource(hSResource, RT_STRING, MAKEINTRESOURCE(1), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), buff, stblSize*sizeof(wchar_t)); delete[] buff; } // delete [] lpBuffer; CloseHandle(hiconFile); } EndUpdateResource(hSResource,false); } } } } return 0; }