DLL-Dateien erstellen (nicht mit AutoIt)?

  • Hallo Leute,

    ich möchte euch mal fragen, wie ich .dll-Dateien erstellen kann? Ich habe in diesen Forum sowie in Google rumgesucht und habe gelesen, hier im Forum, dass die es mit Resource Hacker erstellen. Aber wie? Ich kriege es aufjeden fall nicht hin. Mit C++ kann ich DLL's erstellen, das weiß ich. Ich habe auch gerade Visual C++ Express Edition 2008 drauf, da ich gerade angefangen habe C++ zu lernen. Daher weiß ich auch noch nicht wie ich es mit C++ erstelle. Habt Ihr eine Ahnung wie ich jetzt DLL's einfach erstelle, damit ich dann später mit Resource Hacker Daten importieren kann, wie z.B. Icons, Bitmap, etc.

    Danke im Vorraus.

    MfG

    Mehmet T.

  • es gibt auch "leere" dll's.

    Fliegt hier im Forum glaube ich auch irgendwo rum.
    Wenn Du die nimmst, kannst Du für jedes Projekt die Sachen rein kopieren, die du brauchst.

    Erstellen kannst Du dll's mit AutoIt nicht.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Danke Leute, ihr schafft es einfach immer wieder mir (auch andere) zu helfen. :thumbup: Das ich mit AutoIt keine erstellen kann das weiß ich, deshalb habe ich das in klammern geschrieben: (nicht mit AutoIt). ;)

  • Also ich habe jetzt eine DLL-Programmbibliothek mit IcoFX erstellt: Ressourceneditor geöffnet -&gt; einen icon genommen -&gt; es als .icns gespeichert -&gt; und zuletzt in .dll umbenannt.<br>Wie aber kann ich jetzt die Elemente von der DLL-Datei in AutoIt aufrufen?<br><br>Edit: Habe die DLL-Datei aus dem Beitrag (Ico2DLLs) genommen.&nbsp; <img src="wcf/images/smilies/biggrin.png" wcf_src="wcf/images/smilies/biggrin.png" alt=":D" title="biggrin"> <br>

    2 Mal editiert, zuletzt von MehmeX (17. April 2010 um 12:20)

  • Wie man Icons aus einer DLL-Datei auf einer GUI anzeigt weiß ich bereits, aber wie mache ich es mit BMP, PNG, JPG, etc.?

  • Für PNG geht es so (Hat mir BugFix gezeigt :D :( Schau dir das Beispiel im Anhang an, ein Skript, mit einer Dll, dann siehst du wie es geht.
    Das Skript (funktioniert nur mit der Dll im Anhang, oder pass es an deine Dll an.):

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <Memory.au3>
    #include <GDIPlus.au3>
    #include <StaticConstants.au3>
    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("MustDeclareVars", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $STM_SETIMAGE = 370

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICreate("TestPNG")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $bBinary = _ResourceGetAsRaw(@ScriptDir & "\Bild.dll", "PNG", "STADT") ; PNG is type and number 1 is name
    Global $iWidth = 400
    Global $iHeight = 400
    Global $hPNG = _CreateHBitmapFromBinaryImage($bBinary, $iWidth, $iHeight)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hPicControl = GUICtrlCreatePic("", 10, 10, $iWidth, $iHeight) ;Position des Bildes
    ConsoleWrite($iWidth & " x " & $iHeight & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_DeleteObject(GUICtrlSendMsg($hPicControl, $STM_SETIMAGE, 0, $hPNG))
    _WinAPI_DeleteObject($hPNG)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _ResourceGetAsRaw($sModule, $vResType, $vResName, $iResLang = 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hResDll = _WinAPI_LoadLibraryEx($sModule, $LOAD_LIBRARY_AS_DATAFILE)
    If @error Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $sTypeType = "wstr"
    If IsNumber($vResType) Then $sTypeType = "int"

    [/autoit] [autoit][/autoit] [autoit]

    Local $sNameType = "wstr"
    If IsNumber($vResName) Then $sNameType = "int"

    [/autoit] [autoit][/autoit] [autoit]

    Local $aCall = DllCall("kernel32.dll", "handle", "FindResourceExW", _
    "handle", $hResDll, _
    $sTypeType, $vResType, _
    $sNameType, $vResName, _
    "int", $iResLang)
    If @error Or Not $aCall[0] Then
    _WinAPI_FreeLibrary($hResDll)
    Return SetError(2, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $hResource = $aCall[0]

    [/autoit] [autoit][/autoit] [autoit]

    $aCall = DllCall("kernel32.dll", "int", "SizeofResource", "handle", $hResDll, "handle", $hResource)
    If @error Or Not $aCall[0] Then
    _WinAPI_FreeLibrary($hResDll)
    Return SetError(3, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $iSizeOfResource = $aCall[0]

    [/autoit] [autoit][/autoit] [autoit]

    $aCall = DllCall("kernel32.dll", "handle", "LoadResource", "handle", $hResDll, "handle", $hResource)
    If @error Or Not $aCall[0] Then
    _WinAPI_FreeLibrary($hResDll)
    Return SetError(4, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $hResource = $aCall[0]

    [/autoit] [autoit][/autoit] [autoit]

    $aCall = DllCall("kernel32.dll", "ptr", "LockResource", "handle", $hResource)
    If @error Or Not $aCall[0] Then
    _WinAPI_FreeLibrary($hResDll)
    Return SetError(5, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $pResource = $aCall[0]

    [/autoit] [autoit][/autoit] [autoit]

    Local $tBinary = DllStructCreate("byte[" & $iSizeOfResource & "]", $pResource)
    Local $bBinary = DllStructGetData($tBinary, 1)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_FreeLibrary($hResDll)

    [/autoit] [autoit][/autoit] [autoit]

    Return $bBinary

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_ResourceGetAsRaw

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateHBitmapFromBinaryImage($bBinary, ByRef $iWidth, ByRef $iHeight)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iSize = BinaryLen($bBinary)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hMemGlobal = _MemGlobalAlloc($iSize, $GMEM_MOVEABLE)
    If @error Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $pMemory = _MemGlobalLock($hMemGlobal)
    If @error Then
    _MemGlobalFree($hMemGlobal)
    Return SetError(2, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $tBinary = DllStructCreate("byte[" & $iSize & "]", $pMemory)
    DllStructSetData($tBinary, 1, $bBinary)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aCall = DllCall("ole32.dll", "long", "CreateStreamOnHGlobal", _
    "handle", $pMemory, _
    "int", 1, _ ; automatically free
    "ptr*", 0)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Or $aCall[0] Then
    _MemGlobalFree($hMemGlobal)
    Return SetError(3, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $pStream = $aCall[3]

    [/autoit] [autoit][/autoit] [autoit]

    _MemGlobalUnlock($pMemory)
    If @error Then Return SetError(4, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $aCall = DllCall($ghGDIPDll, "dword", "GdipCreateBitmapFromStream", _
    "ptr", $pStream, _
    "ptr*", 0)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Or $aCall[0] Then
    _GDIPlus_Shutdown()
    _MemGlobalFree($hMemGlobal)
    Return SetError(5, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $pBitmap = $aCall[2]

    [/autoit] [autoit][/autoit] [autoit]

    $aCall = DllCall($ghGDIPDll, "dword", "GdipGetImageDimension", _
    "handle", $pBitmap, _
    "float*", 0, _
    "float*", 0)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Or $aCall[0] Then
    _GDIPlus_ImageDispose($pBitmap)
    _GDIPlus_Shutdown()
    _MemGlobalFree($hMemGlobal)
    Return SetError(6, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $iWidth = $aCall[2]
    $iHeight = $aCall[3]

    [/autoit] [autoit][/autoit] [autoit]

    Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
    If @error Then
    _GDIPlus_ImageDispose($pBitmap)
    _GDIPlus_Shutdown()
    _MemGlobalFree($hMemGlobal)
    Return SetError(7, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_ImageDispose($pBitmap)
    _GDIPlus_Shutdown()
    _MemGlobalFree($hMemGlobal)

    [/autoit] [autoit][/autoit] [autoit]

    Return $hBitmap

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_CreateHBitmapFromBinaryImage

    [/autoit]