Unlua源码解析(附二) 源码中的重要类及核心函数逐行解释
源码解析:重要类及核心函数逐行解释 1. FClassDesc 该类用于描述一个类,包含类名、源码类大小和继承关系等信息。源码 2. FFunctionDesc 对应UE中的源码UFunction,存储更详细信息,源码如参数、源码asyncio源码详解元数据,源码允许FFunctionDesc调用方法。源码 3. FProporityDesc 描述参数,源码并提供参数在Lua和C++间转换的源码辅助方法。 4. FFieldDesc 用于描述字段的源码类。 5. FReflectionRegistry 用于注册反射信息,源码php 源码 github借助UE反射接口加载类。源码 6. FLuaContext 全局类,源码负责绑定Lua对象和实现Lua与C++间的源码交互。 7. LuaCore 包含很多关键方法,如注册类、注册方法,是Unlua的核心类。 8. UUnLuaManager 集成绑定Lua与C++的多种方法。FReflectionRegistry内重要方法
2.1 RegisterClass
-: 通过UE反射接口尝试加载指定类。 : 调用RegisterClass方法。2.2 RegisterClass
-: 若无参数,散文网源码返回。 -: 获取并检查类的类型信息,仅当类型为Struct时继续。 -: 若已注册,使用注册信息;否则注册新信息,返回。2.3 RegisterClassInternal
存名称和Struct到FClassDesc字典,便于后续使用。 -: 创建FClassDesc并记录相关信息。 -: 遍历父类,记录父类名称和Struct。discuz 发帖 源码2.4 GetClassChain
获取类的继承链,OutChain表示类及其父类。LuaCore内重要方法
3.1 Global_RegisterClass
读取类型信息,注册类。3.2 RegisterClass
记录反射信息,创建元表,便于Lua与C++交互。3.3 RegisterClassInternal
创建元表,设置元方法,记录全局表中。3.4 RegisterClassCore
创建元表,广告图源码设置元方法,记录元表信息。3.5 SetTableForClass
将类元表放入全局表。3.6 Class_Index
处理类索引方法。3.7 GetField
获取字段或方法。3.8 GetFunctionList
获取模块内所有方法。3.9 PushObjectCore
创建并绑定Lua对象。3. NewLuaObject
创建Lua表表示UObject。FLuaContext内重要方法
4.1 FindExportedReflectedClass
通过名称查找导出的反射类。4.2 NotifyUObjectCreated
: 存储新创建的Object。 : 尝试绑定Lua到Object。4.3 TryToBindLua
绑定Lua模块到UObject。UUnLuaManager内重要方法
5.1 Bind
新UObject实例创建时,创建Lua对象并绑定。5.2 BindInternal
实现Lua绑定UObject的关键函数。 方法涵盖模块名与C++对象关联、覆盖C++函数、处理动画覆盖等。ASPç¼ç¨å®ä¾
ASPç¼ç¨å®ä¾å¤§å ¨ããASPç®åãæäºç»´æ¤ ï¼ æ¯å°å页é¢åºç¨ç¨åºçéæ© ï¼å¨ä½¿ç¨DCOM ï¼Distributed Component Object Modelï¼å MTSï¼Microsoft Transaction Serverï¼çæ åµä¸ï¼ ASPçè³å¯ä»¥å®ç°ä¸çè§æ¨¡çä¼ä¸åºç¨ç¨åºãé£ä¹aspç¼ç¨ä¸æåªäºå®ä¾æ¯è¾å¸¸ç¨å¢ï¼ä¸é¢æ为大家æ±æ»ASPç¼ç¨ä¸ä¸ªé常æç¨çä¾åï¼ä¸èµ·æ¥å¦ä¹ å§ï¼
ãã1.å¦ä½ç¨Aspå¤æä½ çç½ç«çèæç©çè·¯å¾
ããçï¼ä½¿ç¨Mappathæ¹æ³
ãã<%= Server.MapPath("\")%>
ãã2.æå¦ä½ç¥é使ç¨è æç¨çæµè§å¨ï¼
ããçï¼ä½¿ç¨the Request objectæ¹æ³
ããstrBrowser=Request.ServerVariables("HTTP_USER_AGENT")
ããIf Instr(strBrowser,"MSIE") <> 0 Then
ããResponse.redirect("ForMSIEOnly.htm")
ããElse
ããResponse.redirect("ForAll.htm")
ããEnd If
ãã3.å¦ä½è®¡ç®æ¯å¤©çå¹³ååå¤è®¿é®äººæ°
ããçï¼è§£å³æ¹æ³
ãã<% startdate=DateDiff("d",Now,"//")
ããif strdate<0 then startdate=startdate*-1
ããavgvpd=Int((usercnt)/startdate) %>
ããæ¾ç¤ºç»æ
ãã<% response.write(avgvpd) %>
ããthat is it.this page have been viewed since November ,
ãã4.å¦ä½æ¾ç¤ºéæºå¾è±¡
ãã<% dim p,ppic,dpic
ããppic=
ããrandomize
ããp=Int((ppic*rnd)+1)
ããdpic="graphix/randompics/"&p&".gif"
ãã%>
ããæ¾ç¤º
ãã<img src="<%=dpic%>">
ãã5.å¦ä½åå°å åç页é¢
ããçï¼<a href="<%=request.serverVariables("Http_REFERER")%>">preivous page</a>
ããæç¨å¾çå¦ï¼<img src="arrowback.gif" alt="<%=request.serverVariables("HTTP_REFERER")%>">
ãã6.å¦ä½ç¡®å®å¯¹æ¹çIPå°å
ããçï¼<%=Request.serverVariables("REMOTE_ADDR)%>
ãã7.å¦ä½é¾ç»å°ä¸å¯å¾çä¸
ããçï¼<% @Languages=vbs cript %>
ãã<% response.expires=0
ããstrimagename="graphix/errors/erroriamge.gif"
ããresponse.redirect(strimagename)
ãã%>
ãã8.强迫è¾å ¥å¯ç 对è¯æ¡
ããçï¼æè¿å¥è¯æ¾è½½é¡µé¢çå¼å¤´
ãã<% response.status=" not Authorized"
ããresponse.end
ãã%>
ãã9.å¦ä½ä¼ éåéä»ä¸é¡µå°å¦ä¸é¡µ
ããçï¼ç¨ HIDDEN ç±»åæ¥ä¼ éåé
ãã<% form method="post" action="mynextpage.asp">
ãã<% for each item in request.form %>
ãã<input namee="<%=item%>" type="HIDDEN"
ããvalue="<%=server.HTMLEncode(Request.form(item)) %>">
ãã<% next %>
ãã</form>
ãã.为ä½æå¨ asp ç¨åºå ä½¿ç¨ msgboxï¼ç¨åºåºé说没ææé
ããçï¼ç±äº asp æ¯æå¡å¨è¿è¡çï¼å¦æå¯ä»¥å¨æå¡å¨æ¾ç¤ºä¸ä¸ªå¯¹è¯æ¡ï¼é£ä¹ä½ åªå¥½çæ人æäºç¡®å®ä¹åï¼ä½ çç¨åºæè½ç»§ç»æ§è¡ï¼èä¸è¬æå¡å¨ä¸ä¼æ人å®çï¼æ以微软ä¸å¾ä¸ç¦æ¢è¿ä¸ªå½æ°ï¼å¹¶è¡ä¹±åè¯ä½ (:) åµåµ) 没ææéãä½æ¯ASPå客æ·ç«¯èæ¬ç»ååå¯ä»¥æ¾ç¤ºä¸ä¸ªå¯¹è¯æ¡ï¼as follows:
ãã<% yourVar="æµè¯å¯¹è¯æ¡"%>
ãã<% script language=javas cript>
ããalert("<%=yourvar%>")
ãã</script>
ãã.æ没æåæ³ä¿æ¤èªå·±çæºä»£ç ï¼ä¸ç»äººçå°
ããçï¼å¯ä»¥å»ä¸è½½ä¸ä¸ªå¾®è½¯çWindows s cript Encoderï¼å®å¯ä»¥å¯¹aspçèæ¬å客æ·ç«¯javas cript/vbs criptèæ¬è¿è¡å å¯ãããä¸è¿å®¢æ·ç«¯å å¯åï¼åªæie5æè½æ§è¡ï¼æå¡å¨ç«¯èæ¬å å¯åï¼åªææå¡å¨ä¸å®è£ æs cript engine 5ï¼è£ ä¸ä¸ªie5å°±æäºï¼æè½æ§è¡ã
ãã.ææ ·æè½å° query string ä»ä¸ä¸ª asp æä»¶ä¼ éå°å¦ä¸ä¸ªï¼
ããçï¼åè æ件å å ¥ä¸å¥ï¼ Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))
ãã.global.asaæ件æ»æ¯ä¸èµ·ä½ç¨?
ããçï¼åªæwebç®å½è®¾ç½®ä¸ºweb application, global.asaæææï¼å¹¶ä¸ä¸ä¸ªweb applicationçæ ¹ç®å½ä¸ global.asaæææãIIS4å¯ä»¥ä½¿ç¨Internet Service Manager设置application setting ææ ·æè½ä½¿å¾htmæ件å¦åaspæ件ä¸æ ·å¯ä»¥æ§è¡èæ¬ä»£ç ï¼
ãã.ææ ·æè½ä½¿å¾htmæ件å¦åaspæ件ä¸æ ·å¯ä»¥æ§è¡èæ¬ä»£ç ï¼
ããçï¼Internet Sevices Manager -> éæ©default web site ->å³é¼ é®->èåå±æ§-ã主ç®å½-> åºç¨ç¨åºè®¾ç½®ï¼Application Settingï¼-> ç¹å»æé® "é ç½®"-> app mapping ->ç¹å»æé®"Add" -> executable browseéæ© \WINNT\SYSTEM\INETSRV\ASP.DLL EXTENSION è¾å ¥ htm method exclusions è¾å ¥PUT.DELETE å ¨é¨ç¡®å®å³å¯ãä½æ¯å¼å¾æ³¨æçæ¯è¿æ ·å¯¹htmä¹è¦ç±asp.dllå¤çï¼æçå°éä½ã
ãã.å¦ä½æ³¨åç»ä»¶
ããçï¼æ两ç§æ¹æ³ã
ãã第ä¸ç§æ¹æ³ï¼æ工注å DLL è¿ç§æ¹æ³ä»IIs 3.0ä¸ç´ä½¿ç¨å°IIs 4.0åå ¶å®çWeb Serverãå®éè¦ä½ å¨å½ä»¤è¡æ¹å¼ä¸æ¥æ§è¡ï¼è¿å ¥å°å å«æDLLçç®å½ï¼å¹¶è¾å ¥ï¼regsvr component_name.dll ä¾å¦ c:\temp\regsvr AspEmail.dll å®ä¼ædllçç¹å®ä¿¡æ¯æ³¨åå ¥æå¡å¨ä¸ç注å表ä¸ãç¶åè¿ä¸ªç»ä»¶å°±å¯ä»¥å¨æå¡å¨ä¸ä½¿ç¨äºï¼ä½æ¯è¿ä¸ªæ¹æ³æä¸ä¸ªç¼ºé·ãå½ä½¿ç¨è¿ç§æ¹æ³æ³¨åå®æ¯ç»ä»¶åï¼è¯¥ç»ä»¶å¿ é¡»è¦ç¸åºç设置NTçå¿åå¸å·ææéæ§è¡è¿ä¸ªdllãç¹å«æ¯ä¸äºç»ä»¶éè¦è¯»å注å表ï¼æ以ï¼è¿ä¸ªæ³¨åç»ä»¶çæ¹æ³ä» ä» æ¯ä½¿ç¨å¨æå¡å¨ä¸æ²¡æMTSçæ åµä¸ï¼è¦åæ¶æ³¨åè¿ä¸ªdllï¼ä½¿ç¨ï¼regsvr /u aspobject.dll example c:\temp\regsvr /u aneiodbc.dll
ãã第äºç§æ¹æ³ï¼ä½¿ç¨MTS(Microsoft Transaction Server) MTSæ¯IIS 4æ°å¢ç¹è²ï¼ä½æ¯å®æä¾äºå·¨å¤§çæ¹è¿ãMTSå è®¸ä½ æå®åªææç¹æçç¨æ·æè½å¤è®¿é®ç»ä»¶ï¼å¤§å¤§æé«äºç½ç«æå¡å¨ä¸çå®å ¨æ§è®¾ç½®ãå¨MTSä¸æ³¨åç»ä»¶çæ¥éª¤å¦ä¸ï¼
ãã1) æå¼IIS管çæ§å¶å°ã
ãã2) å±å¼transaction serverï¼å³é®åå»"pkgs installed"ç¶åéæ©"new package"ã
ãã3) åå»"create an empty package"ã
ãã4) ç»è¯¥å å½åã
ãã5) æå®administratorå¸å·æå使ç¨"interactive"ï¼å¦ææå¡å¨ç»å¸¸æ¯ä½¿ç¨administrator ç»éçè¯ï¼ã
ãã6) ç°å¨ä½¿ç¨å³é®åå»ä½ å建ç«çé£ä¸ªå ä¸é¢å±å¼åç"components"ãéæ© "new then component"ã
ãã7) éæ© "install new component" ã
ãã8) æ¾å°ä½ ç`.dllæ件ç¶åéæ©nextå°å®æã
ããè¦å é¤è¿ä¸ªå¯¹è±¡ï¼åªè¦éæ©å®çå¾æ ï¼ç¶åéæ©deleteã
ããé注ï¼ç¹å«è¦æ³¨æ第äºç§æ¹æ³ï¼å®æ¯ç¨æ¥è°è¯èªå·±ç¼åç»ä»¶çæ好æ¹æ³ï¼èä¸å¿ æ¯æ¬¡é½éè¦éæ°å¯å¨æºå¨äºã
ãã. ASPä¸Accessæ°æ®åºè¿æ¥ï¼
ãã<%@ language=VBs cript%>
ãã<%
ããdim conn,mdbfile
ããmdbfile=server.mappath("æ°æ®åºå称.mdb")
ããset conn=server.createobject("adodb.connection")
ããconn.open "driver={ microsoft access driver (*.mdb)};uid=admin;pwd=æ°æ®åºå¯ç ;dbq="&mdbfile
ãã%>
ãã. ASPä¸SQLæ°æ®åºè¿æ¥ï¼
ãã<%@ language=VBs cript%>
ãã<%
ããdim conn
ããset conn=server.createobject("ADODB.connection")
ããcon.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQLæå¡å¨å称æIPå°å;UID=sa;PWD=æ°æ®åºå¯ç ;DATABASE=æ°æ®åºå称
ãã%>
ãã建ç«è®°å½é对象ï¼
ããset rs=server.createobject("adodb.recordset")
ããrs.open SQLè¯å¥,conn,3,2
ãã. SQL常ç¨å½ä»¤ä½¿ç¨æ¹æ³ï¼
ãã(1) æ°æ®è®°å½çéï¼
ããsql="select * from æ°æ®è¡¨ where å段å=åæ®µå¼ order by å段å [desc]"
ããsql="select * from æ°æ®è¡¨ where å段å like %å段å¼% order by å段å [desc]"
ããsql="select top * from æ°æ®è¡¨ where å段å order by å段å [desc]"
ããsql="select * from æ°æ®è¡¨ where å段å in (å¼1,å¼2,å¼3)"
ããsql="select * from æ°æ®è¡¨ where å段å between å¼1 and å¼2"
ãã(2) æ´æ°æ°æ®è®°å½ï¼
ããsql="update æ°æ®è¡¨ set å段å=åæ®µå¼ where æ¡ä»¶è¡¨è¾¾å¼"
ããsql="update æ°æ®è¡¨ set å段1=å¼1,å段2=å¼2 …… å段n=å¼n where æ¡ä»¶è¡¨è¾¾å¼"
ãã(3) å é¤æ°æ®è®°å½ï¼
ããsql="delete from æ°æ®è¡¨ where æ¡ä»¶è¡¨è¾¾å¼"
ããsql="delete from æ°æ®è¡¨" (å°æ°æ®è¡¨ææè®°å½å é¤)
ãã(4) æ·»å æ°æ®è®°å½ï¼
ããsql="insert into æ°æ®è¡¨ (å段1,å段2,å段3 …) valuess (å¼1,å¼2,å¼3 …)"
ããsql="insert into ç®æ æ°æ®è¡¨ select * from æºæ°æ®è¡¨" (ææºæ°æ®è¡¨çè®°å½æ·»å å°ç®æ æ°æ®è¡¨)
ãã(5) æ°æ®è®°å½ç»è®¡å½æ°ï¼
ããAVG(å段å) å¾åºä¸ä¸ªè¡¨æ ¼æ å¹³åå¼
ããCOUNT(*|å段å) 对æ°æ®è¡æ°çç»è®¡æ对æä¸æ æå¼çæ°æ®è¡æ°ç»è®¡
ããMAX(å段å) åå¾ä¸ä¸ªè¡¨æ ¼æ æ大çå¼
ããMIN(å段å) åå¾ä¸ä¸ªè¡¨æ ¼æ æå°çå¼
ããSUM(å段å) ææ°æ®æ çå¼ç¸å
ããå¼ç¨ä»¥ä¸å½æ°çæ¹æ³ï¼
ããsql="select sum(å段å) as å«å from æ°æ®è¡¨ where æ¡ä»¶è¡¨è¾¾å¼"
ããset rs=conn.excute(sql)
ããç¨ rs("å«å") è·åç»ç计å¼ï¼å ¶å®å½æ°è¿ç¨åä¸ã
ãã(5) æ°æ®è¡¨ç建ç«åå é¤ï¼
ããCREATE TABLE æ°æ®è¡¨å称(å段1 ç±»å1(é¿åº¦),å段2 ç±»å2(é¿åº¦) …… )
ããä¾ï¼CREATE TABLE tab(name varchar(),datetime default now())
ããDROP TABLE æ°æ®è¡¨å称 (æ°¸ä¹ æ§å é¤ä¸ä¸ªæ°æ®è¡¨)
ãã. è®°å½é对象çæ¹æ³ï¼
ããrs.movenext å°è®°å½æéä»å½åçä½ç½®åä¸ç§»ä¸è¡
ããrs.moveprevious å°è®°å½æéä»å½åçä½ç½®åä¸ç§»ä¸è¡
ããrs.movefirst å°è®°å½æé移å°æ°æ®è¡¨ç¬¬ä¸è¡
ããrs.movelast å°è®°å½æé移å°æ°æ®è¡¨æåä¸è¡
ããrs.absoluteposition=N å°è®°å½æé移å°æ°æ®è¡¨ç¬¬Nè¡
ããrs.absolutepage=N å°è®°å½æé移å°ç¬¬N页ç第ä¸è¡
ããrs.pagesize=N 设置æ¯é¡µä¸ºNæ¡è®°å½
ããrs.pagecount æ ¹æ® pagesize ç设置è¿åæ»é¡µæ°
ããrs.recordcount è¿åè®°å½æ»æ°
ããrs.bof è¿åè®°å½æéæ¯å¦è¶ åºæ°æ®è¡¨é¦ç«¯ï¼true表示æ¯ï¼false为å¦
ããrs.eof è¿åè®°å½æéæ¯å¦è¶ åºæ°æ®è¡¨æ«ç«¯ï¼true表示æ¯ï¼false为å¦
ããrs.delete å é¤å½åè®°å½ï¼ä½è®°å½æéä¸ä¼åä¸ç§»å¨
ããrs.addnew æ·»å è®°å½å°æ°æ®è¡¨æ«ç«¯
ããrs.update æ´æ°æ°æ®è¡¨è®°å½
ããã Recordset对象æ¹æ³
ããOpenæ¹æ³
ããrecordset.Open Source,ActiveConnection,CursorType,LockType,Options
ããSource
ããRecordset对象å¯ä»¥éè¿Sourceå±æ§æ¥è¿æ¥Command对象ãSourceåæ°å¯ä»¥æ¯ä¸ä¸ªCommand对象å称ãä¸æ®µSQLå½ä»¤ãä¸ä¸ªæå®çæ°æ®è¡¨å称ææ¯ä¸ä¸ªStored Procedureãåå¦çç¥è¿ä¸ªåæ°ï¼ç³»ç»åéç¨Recordset对象çSourceå±æ§ã
ããActiveConnection
ããRecordset对象å¯ä»¥éè¿ActiveConnectionå±æ§æ¥è¿æ¥Connection对象ãè¿éçActiveConnectionå¯ä»¥æ¯ä¸ä¸ªConnection对象ææ¯ä¸ä¸²å å«æ°æ®åºè¿æ¥ä¿¡æ¯ï¼ConnectionStringï¼çå符串åæ°ã
;怎样获得微信公众号的封面?
很多朋友看到公众号发了图文,封面很漂亮,但是点击进去却没有显示该,那么我们该如何获取这张精美的呢,下面我就来详细述说获取微信图文封面图的方法发,就以我刚注册的一个公众号进行举例说明:1、复制图文链接地址。我们看到一篇图文,首先打开该图文,点击右上角三点,点击复制链接。
2、在电脑浏览器打开地址。将地址发送到电脑,并用浏览器打开该地址,页面显示的就是这片图文。
3、查看源代码。右击该网页页面,选择查看源代码,进入源代码查看页面。
4、搜索文章。按快捷键Ctrl+F搜索,输入var msg或者图文标题,就会查找到以下信息。
5、找到信息。搜索以后里边包含很多信息,其中msg_title后面是图文标题,msg_desc后面是图文摘要,msg_cdn_url后面的引号内就是封面地址,msg_link后面的引号内容为图文链接地址。
6、复制地址并打开。复制varmsg_cdn_url后面引号内地址,新建一个浏览器窗口,并在浏览器打开即可显示该,这时你就可以保存到本地使用了。
注意事项:
1、复制链接不要复制到外边引号,否则不能打开。
2、如果记不住代码var msg,可以使用图文标题进行搜索。
2024-12-28 23:30
2024-12-28 22:41
2024-12-28 21:47
2024-12-28 21:43
2024-12-28 21:35