System Userlib

Übersicht BlitzBasic DLLs und Userlibs

Gehe zu Seite Zurück  1, 2, 3

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

BladeRunner

Moderator

BeitragMi, Nov 01, 2006 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Dll beizufügen weil "es professionell aussieht" ist doch -man verzeihe- Bullshit.
Ich bau mir doch nicht Extraballast rein nur weil es gut aussieht und ich damit meine angeben zu können.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Florian

BeitragMi, Nov 01, 2006 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Mit PowerBasic kann man eine Dll aus eine Exe als Resource laden und ausführen.

Laden der Ressource
Code: [AUSKLAPPEN]

 DECLARE FUNCTION MyFunction() AS String
 Resinfo=FindResource(hInstance, "#100", "bin")
 Res=LoadResource(hInstance,Resinfo)
 Lang=SizeofResource(hInstance,Resinfo)


Code: [AUSKLAPPEN]

 LoadPbDllFromMemory Res,SizeofResource(hInstance,Resinfo),My_Dll   
 addr_MyFunction=GetProcAddressDirectly(My_Dll, "MyFunction")
 CALL DWORD addr_MyFunction using MyFunction() TO S$


Function
Code: [AUSKLAPPEN]

FUNCTION GetProcAddressDirectly ALIAS "GetProcAddressDirectly" (BYVAL lpImageDosHeader AS IMAGE_DOS_HEADER PTR, FuncName AS ASCIIZ) EXPORT AS DWORD
 DIM lpImageNtHeaders AS LOCAL IMAGE_NT_HEADERS PTR
 DIM lpImageExportDirectory AS LOCAL IMAGE_EXPORT_DIRECTORY PTR
 DIM lpNameOrdinals AS LOCAL WORD PTR
 DIM lpFunctions AS LOCAL DWORD PTR
 DIM lpExpFuncName AS LOCAL ASCIIZ PTR
 DIM lpName AS LOCAL DWORD PTR
 DIM lpFuncName AS ASCIIZ PTR
 DIM i AS LOCAL DWORD
 DIM j AS LOCAL DWORD
 IF @lpImageDosHeader.e_magic <> %IMAGE_DOS_SIGNATURE THEN
  FUNCTION = 1
  EXIT FUNCTION ' invalid DOS signature
 END IF

 lpImageNtHeaders = lpImageDosHeader + @lpImageDosHeader.e_lfanew
 IF @lpImageNtHeaders.Signature <> %IMAGE_NT_SIGNATURE THEN
  FUNCTION = 1
  EXIT FUNCTION ' invalid NT signature
 END IF

 IF @lpImageNtHeaders.FileHeader.SizeOfOptionalHeader <> SIZEOF(@lpImageNtHeaders.OptionalHeader) OR _
    @lpImageNtHeaders.OptionalHeader.Magic <> %IMAGE_NT_OPTIONAL_HDR32_MAGIC THEN EXIT FUNCTION

 lpImageExportDirectory = @lpImageNtHeaders.OptionalHeader.DataDirectory(%IMAGE_DIRECTORY_ENTRY_EXPORT).VirtualAddress
 IF lpImageExportDirectory = 0 THEN EXIT FUNCTION
 lpImageExportDirectory = lpImageExportDirectory + lpImageDosHeader
 lpNameOrdinals = @lpImageExportDirectory.AddressOfNameOrdinals + lpImageDosHeader
 lpName = @lpImageExportDirectory.AddressOfNames + lpImageDosHeader
 lpFunctions = @lpImageExportDirectory.AddressOfFunctions + lpImageDosHeader
 lpFuncName = VARPTR(FuncName)
 IF HIWRD(lpFuncName) THEN ' Name
  FOR i = 0 TO @lpImageExportDirectory.NumberOfFunctions - 1
   IF @lpFunctions[i] THEN
    FOR j = 0 TO @lpImageExportDirectory.NumberOfNames - 1
     IF @lpNameOrdinals[j] = i THEN
      lpExpFuncName = @lpName[j] + lpImageDosHeader
      IF @lpExpFuncName = FuncName THEN
       FUNCTION = @lpFunctions[i] + lpImageDosHeader
       EXIT FUNCTION
      END IF
     END IF
    NEXT
   END IF
  NEXT
 ELSE
  FOR i = 0 TO @lpImageExportDirectory.NumberOfFunctions - 1
   IF lpFuncName = @lpImageExportDirectory.nBase + i THEN
    IF @lpFunctions[i] THEN FUNCTION = @lpFunctions[i] + lpImageDosHeader
    EXIT FUNCTION
   END IF
  NEXT
 END IF
END FUNCTION



FUNCTION LoadPbDllFromMemory ALIAS "LoadDllFromMemory" (BYVAL lpRawDll AS DWORD, BYVAL RawDllSize AS DWORD, lpImageDll AS DWORD) EXPORT AS DWORD
 DIM sSysInfo AS LOCAL SYSTEM_INFO
 DIM ImagePages AS LOCAL DWORD
 DIM lpImageDosHeader AS LOCAL IMAGE_DOS_HEADER PTR
 DIM lpImageNtHeaders AS LOCAL IMAGE_NT_HEADERS PTR
 DIM lpImageSectionHeader AS LOCAL IMAGE_SECTION_HEADER PTR
 DIM lpImageImportDescriptor AS LOCAL IMAGE_IMPORT_DESCRIPTOR PTR
 DIM lpImageImportByName AS LOCAL IMAGE_IMPORT_BY_NAME PTR
 DIM lpImageBaseRelocTable AS LOCAL IMAGE_BASE_RELOCATION PTR
 DIM lpDllName AS LOCAL ASCIIZ PTR
 DIM szDllName AS LOCAL STRING
 DIM hDll AS LOCAL DWORD
 DIM lpFuncNameRef AS LOCAL DWORD PTR
 DIM lpFuncAddr AS LOCAL DWORD PTR
 DIM lpTypeOffset AS WORD PTR
 DIM TpOffset AS WORD
 DIM lpLink AS LOCAL DWORD PTR
 DIM fOldProtect AS LOCAL DWORD
 DIM i AS LOCAL DWORD
 DIM j AS LOCAL DWORD
 DIM k AS LOCAL DWORD
 DIM Protection() AS LOCAL BYTE
 DIM Addr1 AS LOCAL DWORD
 DIM Addr2 AS LOCAL DWORD
 DIM Pg AS LOCAL DWORD
 DIM Pg1 AS LOCAL DWORD
 DIM Pg2 AS LOCAL DWORD

 lpImageDosHeader = lpRawDll
 IF RawDllSize < SIZEOF(IMAGE_DOS_HEADER) THEN FUNCTION = 1: EXIT FUNCTION
 IF @lpImageDosHeader.e_magic <> %IMAGE_DOS_SIGNATURE THEN FUNCTION = 1: EXIT FUNCTION ' invalid DOS signature
 IF RawDllSize < @lpImageDosHeader.e_lfanew + SIZEOF(IMAGE_NT_HEADERS) THEN FUNCTION = 1: EXIT FUNCTION
 lpImageNtHeaders = lpImageDosHeader + @lpImageDosHeader.e_lfanew
 IF @lpImageNtHeaders.Signature <> %IMAGE_NT_SIGNATURE THEN FUNCTION = 1: EXIT FUNCTION ' invalid NT signature
 IF @lpImageNtHeaders.FileHeader.SizeOfOptionalHeader <> SIZEOF(@lpImageNtHeaders.OptionalHeader) OR _
 @lpImageNtHeaders.OptionalHeader.Magic <> %IMAGE_NT_OPTIONAL_HDR32_MAGIC THEN FUNCTION = 1: EXIT FUNCTION
 IF @lpImageNtHeaders.FileHeader.NumberOfSections < 1 THEN FUNCTION = 1: EXIT FUNCTION
 FOR i = 0 TO %IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1
  IF @lpImageNtHeaders.OptionalHeader.DataDirectory(i).VirtualAddress <> 0 THEN
   SELECT CASE AS LONG i
    CASE %IMAGE_DIRECTORY_ENTRY_EXPORT ' Export Directory
    CASE %IMAGE_DIRECTORY_ENTRY_IMPORT ' Import Directory
    CASE %IMAGE_DIRECTORY_ENTRY_RESOURCE ' Resource Directory
    CASE %IMAGE_DIRECTORY_ENTRY_BASERELOC ' Base Relocation Table
    CASE %IMAGE_DIRECTORY_ENTRY_IAT ' Import Address Table
   CASE ELSE ' Strange for PB
    FUNCTION = 2: EXIT FUNCTION
   END SELECT
  END IF
 NEXT
 lpImageSectionHeader = lpImageNtHeaders + SIZEOF(IMAGE_NT_HEADERS)
 k = lpImageSectionHeader - lpImageDosHeader + SIZEOF(IMAGE_SECTION_HEADER) * @lpImageNtHeaders.FileHeader.NumberOfSections
 j = k
 FOR i = 0 TO @lpImageNtHeaders.FileHeader.NumberOfSections - 1
 j = MAX(j, @lpImageSectionHeader[i].VirtualAddress + @lpImageSectionHeader[i].SizeOfRawData)
 NEXT
 GetSystemInfo sSysInfo
 ImagePages = j \ sSysInfo.dwPageSize: IF (j MOD sSysInfo.dwPageSize) THEN INCR ImagePages
 lpImageDll = VirtualAlloc(BYVAL 0, CDWD(ImagePages * sSysInfo.dwPageSize), %MEM_COMMIT, %PAGE_EXECUTE_READWRITE)
 IF lpImageDll = 0 THEN FUNCTION = 5: EXIT FUNCTION
 MoveMemory BYVAL lpImageDll, BYVAL lpRawDll, k
 FOR i = 0 TO @lpImageNtHeaders.FileHeader.NumberOfSections - 1
  MoveMemory BYVAL CDWD(lpImageDll + @lpImageSectionHeader[i].VirtualAddress), _
  BYVAL CDWD(lpRawDll + @lpImageSectionHeader[i].PointerToRawData), @lpImageSectionHeader[i].SizeOfRawData
 NEXT
 ' Switch to new image
 lpImageDosHeader = lpImageDll
 lpImageNtHeaders = lpImageDosHeader + @lpImageDosHeader.e_lfanew
 lpImageSectionHeader = lpImageNtHeaders + SIZEOF(IMAGE_NT_HEADERS)
 ' Import section
 lpImageImportDescriptor = @lpImageNtHeaders.OptionalHeader.DataDirectory(%IMAGE_DIRECTORY_ENTRY_IMPORT).VirtualAddress
 IF lpImageImportDescriptor <> 0 THEN
  lpImageImportDescriptor = lpImageImportDescriptor + lpImageDosHeader
  WHILE @lpImageImportDescriptor.OriginalFirstThunk <> 0 ' Dlls
   lpDllName = @lpImageImportDescriptor.pName + lpImageDosHeader
   szDllName = @lpDllName
   hDll = GetModuleHandle(BYVAL STRPTR(szDllName))
   IF hDll = 0 THEN hDll = LoadLibrary(BYVAL STRPTR(szDllName))
   IF hDll = 0 THEN FUNCTION = 2: EXIT FUNCTION ' Can't find
   lpFuncNameRef = @lpImageImportDescriptor.OriginalFirstThunk + lpImageDosHeader
   lpFuncAddr = @lpImageImportDescriptor.FirstThunk + lpImageDosHeader
   WHILE @lpFuncNameRef <> 0
    lpImageImportByName = @lpFuncNameRef + lpImageDosHeader
    IF (@lpFuncNameRef AND %IMAGE_ORDINAL_FLAG) THEN
     @lpFuncAddr = GetProcAddress(hDll, BYVAL @lpFuncNameRef AND &HFFFF???)
    ELSE
     @lpFuncAddr = GetProcAddress(hDll, @lpImageImportByName.ImpName)
    END IF
    IF @lpFuncAddr = 0 THEN FUNCTION = 2: EXIT FUNCTION
    INCR lpFuncAddr
    INCR lpFuncNameRef
   WEND
   INCR lpImageImportDescriptor
  LOOP
 END IF
 lpImageBaseRelocTable = @lpImageNtHeaders.OptionalHeader.DataDirectory(%IMAGE_DIRECTORY_ENTRY_BASERELOC).VirtualAddress
 IF lpImageBaseRelocTable <> 0 THEN
  lpImageBaseRelocTable = lpImageBaseRelocTable + lpImageDosHeader
  WHILE @lpImageBaseRelocTable.VirtualAddress <> 0
   lpTypeOffset = lpImageBaseRelocTable + SIZEOF(IMAGE_BASE_RELOCATION)
   WHILE lpTypeOffset < lpImageBaseRelocTable + @lpImageBaseRelocTable.SizeOfBlock
    TpOffset = @lpTypeOffset AND &HF000??
    IF TpOffset = &H3000 THEN
     lpLink = lpImageDosHeader + @lpImageBaseRelocTable.VirtualAddress + (@lpTypeOffset AND &HFFF??)
     @lpLink = @lpLink - @lpImageNtHeaders.OptionalHeader.ImageBase + lpImageDosHeader
    ELSEIF TpOffSet = 0 THEN
    ELSE
     FUNCTION = 3: EXIT FUNCTION ' Uknown type
    END IF
    INCR lpTypeOffset
   WEND
   lpImageBaseRelocTable = lpImageBaseRelocTable + @lpImageBaseRelocTable.SizeOfBlock
  WEND
 END IF
 REDIM Protection(ImagePages - 1)
 FOR i = 0 TO @lpImageNtHeaders.FileHeader.NumberOfSections
  IF i = @lpImageNtHeaders.FileHeader.NumberOfSections THEN
   Addr1 = 0: Addr2 = k: j = &H60000000??? ' %PAGE_EXECUTE_READ
  ELSE
   Addr1 = @lpImageSectionHeader[i].VirtualAddress
   Addr2 = @lpImageSectionHeader[i].SizeOfRawData
   j = @lpImageSectionHeader[i].Characteristics
  END IF
  Addr2 = Addr1 + Addr2 - 1
  Pg1 = Addr1 \ sSysInfo.dwPageSize
  Pg2 = Addr2 \ sSysInfo.dwPageSize
  FOR Pg = Pg1 TO Pg2
   IF (j AND &H20000000???) THEN Protection(Pg) = Protection(Pg) OR 1 ' Execute
   IF (j AND &H40000000???) THEN Protection(Pg) = Protection(Pg) OR 2 ' Read
   IF (j AND &H80000000???) THEN Protection(Pg) = Protection(Pg) OR 4 ' Write
  NEXT
 NEXT
 Addr1 = lpImageDosHeader
 FOR Pg = 0 TO ImagePages - 1
  SELECT CASE AS LONG Protection(Pg)
   CASE 2: fOldProtect = %PAGE_READONLY
   CASE 3: fOldProtect = %PAGE_EXECUTE_READ
   CASE 6: fOldProtect = %PAGE_READWRITE
   CASE ELSE: fOldProtect = %PAGE_EXECUTE_READWRITE ' Ignore strange combinations
  END SELECT
  IF fOldProtect <> %PAGE_EXECUTE_READWRITE THEN _
  IF VirtualProtect (BYVAL Addr1, sSysInfo.dwPageSize, fOldProtect, fOldProtect) = 0 THEN FUNCTION = 4: EXIT FUNCTION
  Addr1 = Addr1 + sSysInfo.dwPageSize
 NEXT
 i = @lpImageNtHeaders.OptionalHeader.AddressOfEntryPoint + lpImageDosHeader
 CALL DWORD i USING EntryPoint (lpImageDosHeader, %DLL_PROCESS_ATTACH, 0)
END FUNCTION

FUNCTION UnloadPbDllFromMemory ALIAS "UnloadDllFromMemory" (BYVAL lpImageDosHeader AS IMAGE_DOS_HEADER PTR) EXPORT AS DWORD
 DIM lpImageNtHeaders AS LOCAL IMAGE_NT_HEADERS PTR
 DIM i AS LOCAL DWORD
 lpImageNtHeaders = lpImageDosHeader + @lpImageDosHeader.e_lfanew
 i = @lpImageNtHeaders.OptionalHeader.AddressOfEntryPoint + lpImageDosHeader
 CALL DWORD i USING EntryPoint (lpImageDosHeader, %DLL_PROCESS_DETACH, 0)
 FUNCTION = VirtualFree (BYVAL lpImageDosHeader, 0, %MEM_RELEASE)
END FUNCTION
             


MfG

Florian
 

snörkl

BeitragMi, Nov 01, 2006 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
könntest du das vielleicht noch ein wenig mehr erläutern Rolling Eyes ^^

wo soll ich das einfügen, was ist powerbasic und was soll ich mit der dll machen, um sie aus einer exe zu laden. Muss ich sie dann nicht mehr extra in den ordner stecken oder oder oder xD?
 

Florian

BeitragMi, Nov 01, 2006 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Erstellung einer Resource-File

*.rc
Code: [AUSKLAPPEN]

#include "Resource.h"
100 bin "MyDll.dll"


Compilieren der Resource mit RC.EXE.
Name der Resource-File *.Res

Aufruf PBRes.exe *.Res

Resource im Programm einbenden

#Resource "MyDll.PBR" 'PowerBasicResource

'Function bekannt machen.
DECLARE FUNCTION MyFunction() AS String

'Resource ermitteln
Resinfo=FindResource(hInstance, "#100", "bin")
'Die Resource wird im Hauptspeicher geladen.
'Res ist Adresse
Res=LoadResource(hInstance,Resinfo)
'Länge ermitteln
Lang=SizeofResource(hInstance,Resinfo)

'Inst DLL
'My_Dll ist ein zeiger der auf die Adresse zeigt.
LoadPbDllFromMemory Res,SizeofResource(hInstance,Resinfo),My_Dll
'Hier mit wird die Adresse der Function "MayFunction" ermittelt
addr_MyFunction=GetProcAddressDirectly(My_Dll, "MyFunction")
'Die Function wird über einen Zeiger aufgerufen.
CALL DWORD addr_MyFunction using MyFunction() TO S$

MfG

Florian
 

lettorTrepuS

BeitragMi, Nov 01, 2006 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

X0r

BeitragMi, Nov 01, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Eine Dll beizufügen weil "es professionell aussieht" ist doch -man verzeihe- Bullshit.
Ich bau mir doch nicht Extraballast rein nur weil es gut aussieht und ich damit meine angeben zu können.

Finde ich nicht. Ach komm, da bei großen Spiele meistens viele Dateien sind, ist es doch egal, ob da nun paar x KB kleine Dlls reinkommen.

Wenn ich z.B die Unreal Engine bei einem Spiel dabei sehe ist mir sofort klar, das muss ein Hammer Spiel sein.


Du kopiert die Dll einfach in die Exe rein(Per writebyte) und beim Laden des Spiel erstellst du eine leere Dll und kopierst den Wert von der exe in die Dll.

Artemis

BeitragMi, Nov 01, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso.

Du bewertest Spiele nach Größe und Anzahl/Art der Dateien.

Also ist irgendsoein Kiddie-Mist hier aus dem Forum toll, weil es zig Dlls benutzt und den Source dabei hat (sind ja viele Dateien) besser, als die Standalone-Exe-Demo von Don't get Angry 2?

Rolling Eyes
 

Florian

BeitragMi, Nov 01, 2006 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Mit den Types geht es nicht. Types haben bei PowerBasic immer eine feste Länge. BlitzBasic hingegen Dynamische-Types. Die länge und Adresse kann sich zur laufzeit ändern.

Mit der Userlib müste es gehen.
In die User-lib müssen viele dafür hinein geschrieben.
Liste der nötzlichen Function
Enthalten Peek und Poke
Code: [AUSKLAPPEN]

DECLARE FUNCTION SysAllocString LIB "OLEAUT32.DLL" ALIAS "SysAllocString" (sz AS ANY) AS DWORD
DECLARE FUNCTION SysReAllocString LIB "OLEAUT32.DLL" ALIAS "SysReAllocString" (pbstr AS ANY, psz AS ANY) AS LONG
DECLARE FUNCTION SysAllocStringLen LIB "OLEAUT32.DLL" ALIAS "SysAllocStringLen" (pch AS ANY, BYVAL cch AS DWORD) AS DWORD
DECLARE FUNCTION SysReAllocStringLen LIB "OLEAUT32.DLL" ALIAS "SysReAllocStringLen" (pbstr AS ANY, psz AS ANY, BYVAL cch AS DWORD) AS LONG
DECLARE SUB      SysFreeString LIB "OLEAUT32.DLL" ALIAS "SysFreeString" (bstr AS ANY)
DECLARE FUNCTION SysStringLen LIB "OLEAUT32.DLL" ALIAS "SysStringLen" (bstr AS ANY) AS DWORD

DECLARE FUNCTION SysStringByteLen LIB "OLEAUT32.DLL" ALIAS "SysStringByteLen" (bstr AS ANY) AS DWORD
DECLARE FUNCTION SysAllocStringByteLen LIB "OLEAUT32.DLL" ALIAS "SysAllocStringByteLen" (psz AS ASCIIZ, BYVAL ulen AS DWORD) AS DWORD

DECLARE SUB      GlobalFix LIB "KERNEL32.DLL" ALIAS "GlobalFix" (BYVAL hMem AS DWORD)
DECLARE FUNCTION GlobalFlags LIB "KERNEL32.DLL" ALIAS "GlobalFlags" (BYVAL hMem AS DWORD) AS LONG
DECLARE FUNCTION GlobalFree LIB "KERNEL32.DLL" ALIAS "GlobalFree" (BYVAL hMem AS DWORD) AS LONG

DECLARE FUNCTION HeapAlloc LIB "KERNEL32.DLL" ALIAS "HeapAlloc" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD, BYVAL dwBytes AS DWORD) AS DWORD
DECLARE FUNCTION HeapCompact LIB "KERNEL32.DLL" ALIAS "HeapCompact" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD) AS DWORD
DECLARE FUNCTION HeapCreate LIB "KERNEL32.DLL" ALIAS "HeapCreate" (BYVAL flOptions AS DWORD, BYVAL dwInitialSize AS DWORD, BYVAL dwMaximumSize AS DWORD) AS DWORD
DECLARE FUNCTION HeapDestroy LIB "KERNEL32.DLL" ALIAS "HeapDestroy" (BYVAL hHeap AS DWORD) AS LONG
DECLARE FUNCTION HeapFree LIB "KERNEL32.DLL" ALIAS "HeapFree" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD, BYVAL lpMem AS DWORD) AS LONG
DECLARE FUNCTION HeapLock LIB "KERNEL32.DLL" ALIAS "HeapLock" (BYVAL hHeap AS DWORD) AS LONG
DECLARE FUNCTION HeapReAlloc LIB "KERNEL32.DLL" ALIAS "HeapReAlloc" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD, BYVAL lpMem AS DWORD, BYVAL dwBytes AS DWORD) AS DWORD
DECLARE FUNCTION HeapSize LIB "KERNEL32.DLL" ALIAS "HeapSize" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD, BYVAL lpMem AS DWORD) AS DWORD
DECLARE FUNCTION HeapUnlock LIB "KERNEL32.DLL" ALIAS "HeapUnlock" (BYVAL hHeap AS DWORD) AS LONG
DECLARE FUNCTION HeapValidate LIB "KERNEL32.DLL" ALIAS "HeapValidate" (BYVAL hHeap AS DWORD, BYVAL dwFlags AS DWORD, BYVAL lpMem AS DWORD) AS LONG

DECLARE FUNCTION VirtualAlloc LIB "KERNEL32.DLL" ALIAS "VirtualAlloc" (lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL flAllocationType AS LONG, BYVAL flProtect AS LONG) AS LONG
DECLARE FUNCTION VirtualAllocEx LIB "KERNEL32.DLL" ALIAS "VirtualAllocEx" (BYVAL hProcess AS DWORD, lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL flAllocationType AS DWORD, BYVAL flProtect AS DWORD) AS DWORD
DECLARE FUNCTION VirtualFree LIB "KERNEL32.DLL" ALIAS "VirtualFree" (lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL dwFreeType AS DWORD) AS LONG
DECLARE FUNCTION VirtualFreeEx LIB "KERNEL32.DLL" ALIAS "VirtualFreeEx" (BYVAL hProcess AS DWORD, lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL dwFreeType AS DWORD) AS LONG
DECLARE FUNCTION VirtualLock LIB "KERNEL32.DLL" ALIAS "VirtualLock" (lpAddress AS ANY, BYVAL dwSize AS DWORD) AS LONG
DECLARE FUNCTION VirtualProtect LIB "KERNEL32.DLL" ALIAS "VirtualProtect" (lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL flNewProtect AS LONG, lpflOldProtect AS LONG) AS LONG
DECLARE FUNCTION VirtualProtectEx LIB "KERNEL32.DLL" ALIAS "VirtualProtectEx" (BYVAL hProcess AS DWORD, lpAddress AS ANY, BYVAL dwSize AS DWORD, BYVAL flNewProtect AS LONG, lpflOldProtect AS LONG) AS LONG
DECLARE FUNCTION VirtualQuery LIB "KERNEL32.DLL" ALIAS "VirtualQuery" (lpAddress AS ANY, lpBuffer AS MEMORY_BASIC_INFORMATION, BYVAL dwLength AS DWORD) AS LONG
DECLARE FUNCTION VirtualQueryEx LIB "KERNEL32.DLL" ALIAS "VirtualQueryEx" (BYVAL hProcess AS DWORD, lpAddress AS ANY, lpBuffer AS MEMORY_BASIC_INFORMATION, BYVAL dwLength AS DWORD) AS LONG




Code: [AUSKLAPPEN]

#INCLUDE "WIN32API.INC" 

%IMAGE_ORDINAL_FLAG = &H80000000
TYPE IMAGE_IMPORT_BY_NAME
 Hint AS WORD
 ImpName AS ASCIIZ * 254
END TYPE

TYPE IMAGE_IMPORT_DESCRIPTOR
 OriginalFirstThunk AS DWORD
 TimeDateStamp AS DWORD
 ForwarderChain AS DWORD
 pName AS DWORD
 FirstThunk AS DWORD
END TYPE

TYPE IMAGE_BASE_RELOCATION
 VirtualAddress AS DWORD
 SizeOfBlock AS DWORD
END TYPE   



MfG

Florian

BladeRunner

Moderator

BeitragMi, Nov 01, 2006 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Florian, das hier ist kein Powerbasic-board, insofern ist dein Code ein wenig fehlplaziert. Kannst Du ihm eine Lösung für BB anbieten? Poste sie. Der Rest hat hier nix verloren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Florian

BeitragMi, Nov 01, 2006 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Die Lösung ist ein wenig kompliziert, da BlitzBasic keine Zeiger hat.
Lad Dir am Besten die Win32API herunter und versucht die Zeiger-Technik mit API nach zubauen.

MfG

Florian
 

X0r

BeitragMi, Nov 01, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Achso.

Du bewertest Spiele nach Größe und Anzahl/Art der Dateien.

Also ist irgendsoein Kiddie-Mist hier aus dem Forum toll, weil es zig Dlls benutzt und den Source dabei hat (sind ja viele Dateien) besser, als die Standalone-Exe-Demo von Don't get Angry 2?

Lol. Nein. Aber wenn ich das Spiel noch nicht getestet habe und ich mir nur so den Inhalt angucke und sehen da eine Exe, dann denke ich "Na das kann ja spannen werden..-_-", sehe ich jedoch haufenweise Dlls + ne super 3d engine, weiß ich, dass das Spiel ein Kracher sein muss.
Ist jetzt aber egal.


>Lad Dir am Besten die Win32API herunter und versucht die Zeiger-Technik mit API nach zubauen.
Rolling Eyes Die ist bei windows nicht dabei oder was?!

Smily

Betreff: Re: System Userlib

BeitragMi, Nov 01, 2006 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
DW hat Folgendes geschrieben:
(...)
Laufwerk öffnen, schließen
Überschrift erklärt alles.
DECLS Datei:
Code: [AUSKLAPPEN]

.lib "winmm.dll"
mciExecute%(lpstrCommand$) : "mciExecute"

lpstrCommand$:
Öffnen: "Set CDaudio door open"
Schließen: "Set CDaudio door closed"


das interesiert mich. ^^
Dem Syntax nach zu urteilen gehe ich mal davon aus, dass man mit diesen Befehl noch mehr machen kann... kann dazu irgendwer was sagen? Laughing
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

BladeRunner

Moderator

BeitragMi, Nov 01, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Bloß weil ein spiel mit einer hochdotierten Engine erstellt wurde muss es kein Kracher sein. Die engine stellt nur Funktionalität zur Verfügung. Was draus gemacht wird kann auch totaler Mist sein.
Ich guck definitiv nicht ob irgendwelche Dateien mitgeliefert sind. Das Spiel selbst muss überzeugen. Mal ab von der Tatsache dass ich normalerweise schon weiss ob mich ein Spiel anspricht wenn ich es kaufen gehe. Sonst würd ich es ja nicht kaufen.
Edit: Upps, totaler offtopic. Ich halt dann jetzt mal die Schnauze.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

X0r

BeitragMi, Nov 01, 2006 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Als PRogrammierer interessiert es mich nunmal, welche Engine das Spiel benutzt und welche Dateiformate.
Und was Dlls sind muss mir nun keiner erklären. Rolling Eyes lol


@Smily0412: Was genau willst du denn machen?
 

lettorTrepuS

BeitragDo, Nov 02, 2006 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

D2006

Administrator

BeitragDo, Nov 02, 2006 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
~GESCHLOSSEN~


Irgendwie ist mir dieser Thread schon länger ein Dorn im Auge. Das im DLLs und Userlibs Archiv nicht diskutiert werden sollte, wisst ihr ja. Zwischendurch waren wir auch bei Wünsch-Dir-Was-Als-DLL, was auch nicht so der Hit war. Würde ich splitten wollen, müsste ich wohl mindestens 3 Threads aufmachen, so viel Off-Topic Gelaber wie hier drin ist.

Naja, nun reicht's.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Gehe zu Seite Zurück  1, 2, 3

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group