Esqueleto do DLL no "ASM":
Código:
.386
.Model flat, StdCall
Option CaseMap:none
;///////////////////////////////////////////////////////////
;Nós fazemos o "Include" a fim evitar definir C/macro
;//////////////////////////////////////////////////////////
Include \masm32\include\windows.inc
Include \masm32\include\user32.inc
Include \masm32\include\kernel32.inc
Include \masm32\include\masm32.inc
IncludeLib \masm32\lib\user32.lib
IncludeLib \masm32\lib\kernel32.lib
IncludeLib \masm32\lib\masm32.lib
.Const
;/////////////////////////////////
;Constantes a Declarar
;/////////////////////////////////
.Data
;///////////////////////////////
;Informação Inicializada!
;//////////////////////////////
.Data?
;//////////////////////////////
;Informação sem Inicializar
;/////////////////////////////
.Code
DLLEntry Proc hInstDLL:HINSTANCE, reason:DWord, reserved1:DWord
Mov Eax, TRUE
Ret
DLLEntry EndP
Agora sabendo como é o esqueleto do DLL no ASM, nós tentaremos adicionar algum PROC:
Código:
INILoad Proc
;/////////////////////////////////////////////////////////////////
; INILoad é o PROC do DLL
; Aqui nós adicionaremos o índice do .ini da configuração
;////////////////////////////////////////////////////////////////
Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]
Mov DWord Ptr Ds:[508467H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr SoulPrice, 6000000, Addr [IniFile]
Mov DWord Ptr Ds:[508446H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosPrice, 810000, Addr [IniFile]
Mov DWord Ptr Ds:[508489H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr LifePrice, 45000000, Addr [IniFile]
Mov DWord Ptr Ds:[5084ABH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr CreationPrice, 36000000, Addr [IniFile]
Mov DWord Ptr Ds:[5084CCH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ExcelentDrop, 2000, Addr [IniFile]
Mov DWord Ptr Ds:[41A492H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix10, 50, Addr [IniFile]
Mov DWord Ptr Ds:[49136FH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix11, 45, Addr [IniFile]
Mov DWord Ptr Ds:[49139AH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix12, 45, Addr [IniFile]
Mov DWord Ptr Ds:[4913C5H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix13, 45, Addr [IniFile]
Mov DWord Ptr Ds:[4913F0H], Eax
INILoad EndP
Naquela PROC que nós o fizemos devia criar a leitura do INI
Explicação pelas peças do Proc INILoad
Código:
Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]Invoke GetPrivateProfileIntA = É a função necessária carregar o ini ou uma lima da configuração.
Addr Sections = A seção é adicionada aqui onde INI será a função de nossos (Key).... Ejemplo: "Sections" = CommonOptions (em .ini [CommonOptions])
Addr BlessPrice, 9000000 = BlessPrice é a opção que nós definimos neste caso o preço de uma jóia, 9000000 = O preço padrão mas define outro no ini
[IniFile] = Diz aqui que deve o olhar em nosso .INI
Mov DWord Ptr Ds:[508467H], Eax508467 = É o OFFSET onde está a opção (no GS) essa nós quer que é modificada em nosso INI (neste caso, é o OFFSET onde é o preço do bless)
INILoad EndP
Indica-nos que o PROC terminou lá.
-------------
Você terá observado quem muitas coisas de PROC (INILoad) devem ser declaradas antes de poder o usar, à continuação eu adiciono o esqueleto do DLL já visto com este PROC (INILoad) adicionado e tudo declarados:
Código:
.386
.Model flat, StdCall
Option CaseMap:none
;///////////////////////////////////////////////////////////
;Nós fazemos o "Include" a fim evitar definir C/macro
;//////////////////////////////////////////////////////////
Include \masm32\include\windows.inc
Include \masm32\include\user32.inc
Include \masm32\include\kernel32.inc
Include \masm32\include\masm32.inc
IncludeLib \masm32\lib\user32.lib
IncludeLib \masm32\lib\kernel32.lib
IncludeLib \masm32\lib\masm32.lib
.Const
;/////////////////////////////////
;Constantes a Declarar
;/////////////////////////////////
.Data
;///////////////////////////////
;Informação Inicializada!
;//////////////////////////////
IniFile DB "./CMT.ini", 0 ;Nome do INI
Sections DB "CommonOptions", 0 ;Nome do Sections
BlessPrice DB "BlessPrice", 0
SoulPrice DB "SoulPrice", 0
ChaosPrice DB "ChaosPrice", 0
LifePrice DB "LifePrice", 0
CreationPrice DB "CreationPrice", 0
ExcelentDrop DB "ExcelentDrop", 0
SoulRate DB "SoulRate", 0
ChaosMix10 DB "ChaosMix10", 0
ChaosMix11 DB "ChaosMix11", 0
ChaosMix12 DB "ChaosMix12", 0
ChaosMix13 DB "ChaosMix13", 0
.Data?
;//////////////////////////////
;Informação sem Inicializar
;/////////////////////////////
.Code
DLLEntry Proc hInstDLL:HINSTANCE, reason:DWord, reserved1:DWord
Mov Eax, TRUE
Ret
DLLEntry EndP
;--------------------------------------------------------------------
;--------------------------------------------------------------------
INILoad Proc
;/////////////////////////////////////////////////////////////////
; INILoad é o PROC do DLL
; Aqui nós adicionaremos o índice do .ini da configuração
;////////////////////////////////////////////////////////////////
Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]
Mov DWord Ptr Ds:[508467H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr SoulPrice, 6000000, Addr [IniFile]
Mov DWord Ptr Ds:[508446H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosPrice, 810000, Addr [IniFile]
Mov DWord Ptr Ds:[508489H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr LifePrice, 45000000, Addr [IniFile]
Mov DWord Ptr Ds:[5084ABH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr CreationPrice, 36000000, Addr [IniFile]
Mov DWord Ptr Ds:[5084CCH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ExcelentDrop, 2000, Addr [IniFile]
Mov DWord Ptr Ds:[41A492H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix10, 50, Addr [IniFile]
Mov DWord Ptr Ds:[49136FH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix11, 45, Addr [IniFile]
Mov DWord Ptr Ds:[49139AH], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix12, 45, Addr [IniFile]
Mov DWord Ptr Ds:[4913C5H], Eax
Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix13, 45, Addr [IniFile]
Mov DWord Ptr Ds:[4913F0H], Eax
INILoad EndP
;--------------------------------------------------------------------
;--------------------------------------------------------------------
End DLLEntry
Antes de compilar nosso DLL, nós necessitamos criar um Modulo do Definicion (NomedoDLL.Def) que contem:
Código:
LYBRARY NomeDoDLL
EXPORTS INILoad
Creditos:
Código:
MG_STATS (SINREPACKS.COM)