Skip to content

Xlua Custom Loading Module Design

daao edited this page Jul 27, 2017 · 1 revision

Xlua Custom Loading Module Design

require

load a module example

requrie(moduleName)

load sequence flow

firstly, require is a function

package.loaded 
{
    _G 
    { 
        require =  function: 0x003c3990
    }
}

pseudo code

function require(moduleName)
  if not package.loaded[moduleName] then
    local loader = findloader(moduleName)
    if loader == nil then
        error(" loader == nil ", moduleName)
    end 
    
    package.loaded[moduleName] = true? notice this why here is true ?
    
    local res = loader(moduleName)
    if res ~= nil then
      package.loaded[moduleName] = res
    end
  end
  return package.loaded[moduleName]
end

how to find a loder

package 
{
    loaded	:	table: 0x00332468
    loaders	:	table: 0x00333418 
    
    preload	:	table: 0x00333d88
    
    path : ""
    
    cpath	:   ""
    loadlib	:	function: 0x00333358
    
}

use package.loaders

image_1b7uejdqvse921o1tqt561rr113.png-67.1kB

here is debug watch window

image_1b7uepnt1tciuua139317s6lj81g.png-30.2kB

some tip, why can require "moduleName" or require(moduleName)

image_1b7ueriok1n001oc21t6fjrann51t.png-57.1kB

tolua sequence flow

image_1b7uhv3pftsdr9t1foplpph8g9.png-32.6kB

Clone this wiki locally