ivaneeo's blog自由的力量,自由的生活。 |
declare
c number(4);
begin
for k in 1..13 loop
c := 590+k;
dbms_job.submit(c,
'ODS_UTL_DIFF.DIFF('||k||',2,''0,21'');',
sysdate,
'trunc(sysdate)+21/24+7');
commit;
end loop;
end;
qt4內(nèi)置有sqlite插件,可以直接使用sqlite.但是發(fā)現(xiàn)插入中文時會有亂碼問題。
以windows為例,qt4內(nèi)置編碼為system(GBK).而sqlite內(nèi)部編碼為unicode. 如果插入中文首先要轉(zhuǎn)換為unicode.而從數(shù)據(jù)庫讀取時則不需要,因為qt會自動偵測編碼, 實例代碼: //插入記錄 QSqlQuery query; QByteArray sql = "insert into person values(1, 'hello', '你好!')"; QTextCodec *codec = QTextCodec::codecForName("GBK"); QString string = codec->toUnicode(sql); query.exec(string); //讀入記錄 QSqlQuery query("select * from person"); while (query.next()) { QString string = query.value(2).toString();; QMessageBox::information(0, "infa", string, QMessageBox::Ok); }
1.
Transformation代表Informatica Server對數(shù)據(jù)的操作。 Transformation分類:Active和Passive 輸入跟輸出的記錄數(shù)會發(fā)生改變 不能re-linked到另一個data stream 例子:Aggregator, Filter, Joiner, Normalizer, Rank, Update Strategy, Advanced External Procedure, ERP Source Qualifier and Source Qualifier, Application Source Qualifier, Router, Sorter Passive transformations 輸入跟輸出的記錄數(shù)一樣 可以re-linked到另一個data stream 例子:Expression, External Procedure, Lookup, Sequence Generator Stored Procedure, Input, Output, XML Source Qualifier Transformations分類 : connected 和 unconnected,unconnected transformation在其他的組件中被調(diào)用并且有返回值。 ETL的簡介:
ETL即數(shù)據(jù)抽取(Extract)、轉(zhuǎn)換(Transform)、裝載(Load)的過程,它是構(gòu)建數(shù)據(jù)倉庫的重要環(huán)節(jié)1、 數(shù)據(jù)清洗數(shù)據(jù)清洗的任務(wù)是過濾那些不符合要求的數(shù)據(jù),將過濾的結(jié)果交給業(yè)務(wù)主管部門,確認是否過濾掉還是由業(yè)務(wù)單位修正之后再進行抽取。不符合要求的數(shù)據(jù)主要是有不完整的數(shù)據(jù)、錯誤的數(shù)據(jù)、重復(fù)的數(shù)據(jù)三大類。 (1)不完整的數(shù)據(jù):這一類數(shù)據(jù)主要是一些應(yīng)該有的信息缺失,如供應(yīng)商的名稱、分公司的名稱、客戶的區(qū)域信息缺失、業(yè)務(wù)系統(tǒng)中主表與明細表不能 匹配等。對于這一類數(shù)據(jù)過濾出來,按缺失的內(nèi)容分別寫入不同Excel文件向客戶提交,要求在規(guī)定的時間內(nèi)補全。補全后才寫入數(shù)據(jù)倉庫。 (2)錯誤的數(shù)據(jù):這一類錯誤產(chǎn)生的原因是業(yè)務(wù)系統(tǒng)不夠健全,在接收輸入后沒有進行判斷直接寫入后臺數(shù)據(jù)庫造成的,比如數(shù)值數(shù)據(jù)輸成全角數(shù)字字 符、字符串?dāng)?shù)據(jù)后面有一個回車操作、日期格式不正確、日期越界等。這一類數(shù)據(jù)也要分類,對于類似于全角字符、數(shù)據(jù)前后有不可見字符的問題,只能通過寫 SQL語句的方式找出來,然后要求客戶在業(yè)務(wù)系統(tǒng)修正之后抽取。日期格式不正確的或者是日期越界的這一類錯誤會導(dǎo)致ETL運行失敗,這一類錯誤需要去業(yè)務(wù) 系統(tǒng)數(shù)據(jù)庫用SQL的方式挑出來,交給業(yè)務(wù)主管部門要求限期修正,修正之后再抽取。 (3)重復(fù)的數(shù)據(jù):對于這一類數(shù)據(jù)——特別是維表中會出現(xiàn)這種情況——將重復(fù)數(shù)據(jù)記錄的所有字段導(dǎo)出來,讓客戶確認并整理。 數(shù)據(jù)清洗是一個反復(fù)的過程,不可能在幾天內(nèi)完成,只有不斷的發(fā)現(xiàn)問題,解決問題。對于是否過濾,是否修正一般要求客戶確認,對于過濾掉的數(shù)據(jù), 寫入Excel文件或者將過濾數(shù)據(jù)寫入數(shù)據(jù)表,在ETL開發(fā)的初期可以每天向業(yè)務(wù)單位發(fā)送過濾數(shù)據(jù)的郵件,促使他們盡快地修正錯誤,同時也可以做為將來驗 證數(shù)據(jù)的依據(jù)。數(shù)據(jù)清洗需要注意的是不要將有用的數(shù)據(jù)過濾掉,對于每個過濾規(guī)則認真進行驗證,并要用戶確認。 2、 數(shù)據(jù)轉(zhuǎn)換 數(shù)據(jù)轉(zhuǎn)換的任務(wù)主要進行不一致的數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)粒度的轉(zhuǎn)換,以及一些商務(wù)規(guī)則的計算。 (1)不一致數(shù)據(jù)轉(zhuǎn)換:這個過程是一個整合的過程,將不同業(yè)務(wù)系統(tǒng)的相同類型的數(shù)據(jù)統(tǒng)一,比如同一個供應(yīng)商在結(jié)算系統(tǒng)的編碼是XX0001,而在CRM中編碼是YY0001,這樣在抽取過來之后統(tǒng)一轉(zhuǎn)換成一個編碼。 (2)數(shù)據(jù)粒度的轉(zhuǎn)換:業(yè)務(wù)系統(tǒng)一般存儲非常明細的數(shù)據(jù),而數(shù)據(jù)倉庫中數(shù)據(jù)是用來分析的,不需要非常明細的數(shù)據(jù)。一般情況下,會將業(yè)務(wù)系統(tǒng)數(shù)據(jù)按照數(shù)據(jù)倉庫粒度進行聚合。 (3)商務(wù)規(guī)則的計算:不同的企業(yè)有不同的業(yè)務(wù)規(guī)則、不同的數(shù)據(jù)指標,這些指標有的時候不是簡單的加加減減就能完成,這個時候需要在ETL中將這些數(shù)據(jù)指標計算好了之后存儲在數(shù)據(jù)倉庫中,以供分析使用。 三、ETL日志、警告發(fā)送 1、 ETL日志 ETL日志分為三類。一類是執(zhí)行過程日志,這一部分日志是在ETL執(zhí)行過程中每執(zhí)行一步的記錄,記錄每次運行每一步驟的起始時間,影響了多少行 數(shù)據(jù),流水賬形式。一類是錯誤日志,當(dāng)某個模塊出錯的時候?qū)戝e誤日志,記錄每次出錯的時間、出錯的模塊以及出錯的信息等。第三類日志是總體日志,只記錄 ETL開始時間、結(jié)束時間是否成功信息。如果使用ETL工具,ETL工具會自動產(chǎn)生一些日志,這一類日志也可以作為ETL日志的一部分。記錄日志的目的是 隨時可以知道ETL運行情況,如果出錯了,可以知道哪里出錯。 2、 警告發(fā)送 如果ETL出錯了,不僅要形成ETL出錯日志,而且要向系統(tǒng)管理員發(fā)送警告。發(fā)送警告的方式多種,一般常用的就是給系統(tǒng)管理員發(fā)送郵件,并附上出錯的信息,方便管理員排查錯誤。 ETL是BI項目的關(guān)鍵部分,也是一個長期的過程,只有不斷的發(fā)現(xiàn)問題并解決問題,才能使ETL運行效率更高,為BI項目后期開發(fā)提供準確的數(shù)據(jù)。
配置模板:config.vc
# ========================================================================= # This configuration file was generated by # Bakefile 0.2.1 (http://bakefile.sourceforge.net) # Beware that all changes made to this file will be overwritten next # time you run Bakefile! # ========================================================================= # ------------------------------------------------------------------------- # These are configurable options: # ------------------------------------------------------------------------- # C compiler CC = cl # C++ compiler CXX = cl # Standard flags for CC CFLAGS = # Standard flags for C++ CXXFLAGS = # Standard preprocessor flags (common for CC and CXX) CPPFLAGS = # Standard linker flags LDFLAGS = # The C preprocessor CPP = $(CC) /EP /nologo # What type of library to build? [0,1] SHARED = 0 # Build wxUniversal instead of native port? [0,1] WXUNIV = 0 # Compile Unicode build of wxWidgets? [0,1] UNICODE = 0 # Use MSLU library when building Unicode version. [0,1] MSLU = 0 # Type of compiled binaries [debug,release] BUILD = release # The target processor architecture must be specified when it is not X86. # This does not affect the compiler output, so you still need to make sure # your environment is set up appropriately with the correct compiler in the # PATH. Rather it affects some options passed to some of the common build # utilities such as the resource compiler and the linker. # # Accepted values: AMD64, IA64. TARGET_CPU = $(CPU) # Should debugging info be included in the executables? The default value # "default" means that debug info will be included if BUILD=debug # and not included if BUILD=release. [0,1,default] DEBUG_INFO = default # Should __WXDEBUG__ be defined? The default value "default" means that it will # be defined if BUILD=debug and not defined if BUILD=release. [0,1,default] DEBUG_FLAG = default # Should link against debug RTL (msvcrtd.dll) or release (msvcrt.dll)? # Acts according to BUILD by default. [0,1,default] DEBUG_RUNTIME_LIBS = default # Multiple libraries or single huge monolithic one? [0,1] MONOLITHIC = 0 # Build GUI libraries? [0,1] USE_GUI = 1 # Build wxHTML library (USE_GUI must be 1)? [0,1] USE_HTML = 1 # Build multimedia library (USE_GUI must be 1)? [0,1] USE_MEDIA = 1 # Build wxXRC library (USE_GUI must be 1)? [0,1] USE_XRC = 1 # Build wxAUI library (USE_GUI must be 1)? [0,1] USE_AUI = 1 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1] USE_RICHTEXT = 1 # Build OpenGL canvas library (USE_GUI must be 1)? [0,1] USE_OPENGL = 0 # Build ODBC database classes (USE_GUI must be 1)? [0,1] USE_ODBC = 0 # Build quality assurance classes library (USE_GUI must be 1)? [0,1] USE_QA = 1 # Enable exceptions in compiled code. [0,1] USE_EXCEPTIONS = 1 # Enable run-time type information (RTTI) in compiled code. [0,1] USE_RTTI = 1 # Enable threading in compiled code. [0,1] USE_THREADS = 1 # Link with gdiplus.lib? (Needed for wxGraphicsContext, will also set wxUSE_GRAPHICS_CONTEXT) [0,1] USE_GDIPLUS = 0 # Is this official build by wxWidgets developers? [0,1] OFFICIAL_BUILD = 0 # Use this to name your customized DLLs differently VENDOR = custom # WX_FLAVOUR = # WX_LIB_FLAVOUR = # Name of your custom configuration. This affects directory # where object files are stored as well as the location of # compiled .lib files and setup.h under the lib/ toplevel directory. CFG = # Compiler flags needed to compile test suite in tests directory. If you want # to run the tests, set it so that the compiler can find CppUnit headers. CPPUNIT_CFLAGS = # Linker flags needed to link test suite in tests directory. If you want # to run the tests, include CppUnit library here. CPPUNIT_LIBS = # Version of C runtime library to use. You can change this to # static if SHARED=0, but it is highly recommended to not do # it if SHARED=1 unless you know what you are doing. [dynamic,static] RUNTIME_LIBS = dynamic makefile: makefile.vc # ========================================================================= # This makefile was generated by # Bakefile 0.2.1 (http://bakefile.sourceforge.net) # Do not modify, all changes will be overwritten! # ========================================================================= !include <../../build/msw/config.vc> # ------------------------------------------------------------------------- # Do not modify the rest of this file! # ------------------------------------------------------------------------- ### Variables: ### WX_RELEASE_NODOT = 28 OBJS = \ vc_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)$(DIR_SUFFIX_CPU) LIBDIRNAME = .\..\..\lib\vc$(DIR_SUFFIX_CPU)_$(LIBTYPE_SUFFIX)$(CFG) SETUPHDIR = \ $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG) TASKBAR_CXXFLAGS = /M$(__RUNTIME_LIBS_8)$(__DEBUGRUNTIME_3) /DWIN32 \ $(__DEBUGINFO_0) /Fd$(OBJS)\taskbar.pdb $(____DEBUGRUNTIME_2_p) \ $(__OPTIMIZEFLAG_4) $(__NO_VC_CRTDBG_p) /D__WXMSW__ $(__WXUNIV_DEFINE_p) \ $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \ $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \ $(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include /W4 /I. $(__DLLFLAG_p) \ /D_WINDOWS /I.\..\..\samples /DNOPCH $(__RTTIFLAG_9) $(__EXCEPTIONSFLAG_10) \ $(CPPFLAGS) $(CXXFLAGS) TASKBAR_OBJECTS = \ $(OBJS)\taskbar_sample.res \ $(OBJS)\taskbar_tbtest.obj ### Conditionally set variables: ### !if "$(USE_GUI)" == "0" PORTNAME = base !endif !if "$(USE_GUI)" == "1" PORTNAME = msw !endif !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default" WXDEBUGFLAG = d !endif !if "$(DEBUG_FLAG)" == "1" WXDEBUGFLAG = d !endif !if "$(UNICODE)" == "1" WXUNICODEFLAG = u !endif !if "$(WXUNIV)" == "1" WXUNIVNAME = univ !endif !if "$(TARGET_CPU)" == "amd64" DIR_SUFFIX_CPU = _amd64 !endif !if "$(TARGET_CPU)" == "amd64" DIR_SUFFIX_CPU = _amd64 !endif !if "$(TARGET_CPU)" == "ia64" DIR_SUFFIX_CPU = _ia64 !endif !if "$(TARGET_CPU)" == "ia64" DIR_SUFFIX_CPU = _ia64 !endif !if "$(SHARED)" == "1" WXDLLFLAG = dll !endif !if "$(SHARED)" == "0" LIBTYPE_SUFFIX = lib !endif !if "$(SHARED)" == "1" LIBTYPE_SUFFIX = dll !endif !if "$(TARGET_CPU)" == "amd64" LINK_TARGET_CPU = /MACHINE:AMD64 !endif !if "$(TARGET_CPU)" == "amd64" LINK_TARGET_CPU = /MACHINE:AMD64 !endif !if "$(TARGET_CPU)" == "ia64" LINK_TARGET_CPU = /MACHINE:IA64 !endif !if "$(TARGET_CPU)" == "ia64" LINK_TARGET_CPU = /MACHINE:IA64 !endif !if "$(MONOLITHIC)" == "0" EXTRALIBS_FOR_BASE = !endif !if "$(MONOLITHIC)" == "1" EXTRALIBS_FOR_BASE = !endif !if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default" __DEBUGINFO_0 = /Zi !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" __DEBUGINFO_0 = !endif !if "$(DEBUG_INFO)" == "0" __DEBUGINFO_0 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_0 = /Zi !endif !if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default" __DEBUGINFO_1 = /DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" __DEBUGINFO_1 = !endif !if "$(DEBUG_INFO)" == "0" __DEBUGINFO_1 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_1 = /DEBUG !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default" ____DEBUGRUNTIME_2_p = /D_DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" ____DEBUGRUNTIME_2_p = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" ____DEBUGRUNTIME_2_p = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" ____DEBUGRUNTIME_2_p = /D_DEBUG !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default" ____DEBUGRUNTIME_2_p_1 = /d _DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" ____DEBUGRUNTIME_2_p_1 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" ____DEBUGRUNTIME_2_p_1 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" ____DEBUGRUNTIME_2_p_1 = /d _DEBUG !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default" __DEBUGRUNTIME_3 = d !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" __DEBUGRUNTIME_3 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" __DEBUGRUNTIME_3 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" __DEBUGRUNTIME_3 = d !endif !if "$(BUILD)" == "debug" __OPTIMIZEFLAG_4 = /Od !endif !if "$(BUILD)" == "release" __OPTIMIZEFLAG_4 = /O2 !endif !if "$(USE_THREADS)" == "0" __THREADSFLAG_7 = L !endif !if "$(USE_THREADS)" == "1" __THREADSFLAG_7 = T !endif !if "$(RUNTIME_LIBS)" == "dynamic" __RUNTIME_LIBS_8 = D !endif !if "$(RUNTIME_LIBS)" == "static" __RUNTIME_LIBS_8 = $(__THREADSFLAG_7) !endif !if "$(USE_RTTI)" == "0" __RTTIFLAG_9 = !endif !if "$(USE_RTTI)" == "1" __RTTIFLAG_9 = /GR !endif !if "$(USE_EXCEPTIONS)" == "0" __EXCEPTIONSFLAG_10 = !endif !if "$(USE_EXCEPTIONS)" == "1" __EXCEPTIONSFLAG_10 = /EHsc !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0" __NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__ !endif !if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1" __NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__ !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0" __NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__ !endif !if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1" __NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__ !endif !if "$(WXUNIV)" == "1" __WXUNIV_DEFINE_p = /D__WXUNIVERSAL__ !endif !if "$(WXUNIV)" == "1" __WXUNIV_DEFINE_p_1 = /d __WXUNIVERSAL__ !endif !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default" __DEBUG_DEFINE_p = /D__WXDEBUG__ !endif !if "$(DEBUG_FLAG)" == "1" __DEBUG_DEFINE_p = /D__WXDEBUG__ !endif !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default" __DEBUG_DEFINE_p_1 = /d __WXDEBUG__ !endif !if "$(DEBUG_FLAG)" == "1" __DEBUG_DEFINE_p_1 = /d __WXDEBUG__ !endif !if "$(USE_EXCEPTIONS)" == "0" __EXCEPTIONS_DEFINE_p = /DwxNO_EXCEPTIONS !endif !if "$(USE_EXCEPTIONS)" == "0" __EXCEPTIONS_DEFINE_p_1 = /d wxNO_EXCEPTIONS !endif !if "$(USE_RTTI)" == "0" __RTTI_DEFINE_p = /DwxNO_RTTI !endif !if "$(USE_RTTI)" == "0" __RTTI_DEFINE_p_1 = /d wxNO_RTTI !endif !if "$(USE_THREADS)" == "0" __THREAD_DEFINE_p = /DwxNO_THREADS !endif !if "$(USE_THREADS)" == "0" __THREAD_DEFINE_p_1 = /d wxNO_THREADS !endif !if "$(UNICODE)" == "1" __UNICODE_DEFINE_p = /D_UNICODE !endif !if "$(UNICODE)" == "1" __UNICODE_DEFINE_p_1 = /d _UNICODE !endif !if "$(MSLU)" == "1" __MSLU_DEFINE_p = /DwxUSE_UNICODE_MSLU=1 !endif !if "$(MSLU)" == "1" __MSLU_DEFINE_p_1 = /d wxUSE_UNICODE_MSLU=1 !endif !if "$(USE_GDIPLUS)" == "1" __GFXCTX_DEFINE_p = /DwxUSE_GRAPHICS_CONTEXT=1 !endif !if "$(USE_GDIPLUS)" == "1" __GFXCTX_DEFINE_p_1 = /d wxUSE_GRAPHICS_CONTEXT=1 !endif !if "$(SHARED)" == "1" __DLLFLAG_p = /DWXUSINGDLL !endif !if "$(SHARED)" == "1" __DLLFLAG_p_1 = /d WXUSINGDLL !endif !if "$(MONOLITHIC)" == "0" __WXLIB_ADV_p = \ wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib !endif !if "$(MONOLITHIC)" == "0" __WXLIB_HTML_p = \ wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html.lib !endif !if "$(MONOLITHIC)" == "0" __WXLIB_XML_p = \ wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib !endif !if "$(MONOLITHIC)" == "0" __WXLIB_CORE_p = \ wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib !endif !if "$(MONOLITHIC)" == "0" __WXLIB_BASE_p = \ wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib !endif !if "$(MONOLITHIC)" == "1" __WXLIB_MONO_p = \ wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib !endif !if "$(USE_GUI)" == "1" __LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib !endif !if "$(USE_GUI)" == "1" __LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib !endif !if "$(USE_GUI)" == "1" __LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib !endif !if "$(MSLU)" == "1" __UNICOWS_LIB_p = unicows.lib !endif !if "$(USE_GDIPLUS)" == "1" __GDIPLUS_LIB_p = gdiplus.lib !endif all: $(OBJS) $(OBJS): -if not exist $(OBJS) mkdir $(OBJS) ### Targets: ### all: $(OBJS)\taskbar.exe clean: -if exist $(OBJS)\*.obj del $(OBJS)\*.obj -if exist $(OBJS)\*.res del $(OBJS)\*.res -if exist $(OBJS)\*.pch del $(OBJS)\*.pch -if exist $(OBJS)\taskbar.exe del $(OBJS)\taskbar.exe -if exist $(OBJS)\taskbar.ilk del $(OBJS)\taskbar.ilk -if exist $(OBJS)\taskbar.pdb del $(OBJS)\taskbar.pdb $(OBJS)\taskbar.exe: $(TASKBAR_OBJECTS) $(OBJS)\taskbar_sample.res link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<< $(TASKBAR_OBJECTS) $(__WXLIB_ADV_p) $(__WXLIB_HTML_p) $(__WXLIB_XML_p) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib odbc32.lib << $(OBJS)\taskbar_sample.res: .\..\..\samples\sample.rc rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) $(__GFXCTX_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples $** $(OBJS)\taskbar_tbtest.obj: .\tbtest.cpp $(CXX) /c /nologo /TP /Fo$@ $(TASKBAR_CXXFLAGS) $**
1.GetVersionEx
???wince:GetVersionExW_OSVERSIONINFOW ???winnt:GetVersionExA_OSVERSIONINFOA, GetVersionExW_OSVERSIONINFOW, GetVersionExA_OSVERSIONINFOEXA, GetVersionExW_OSVERSIONINFOEXW ???win98:需unicode支持
實現(xiàn)的manifest文件如下:
???<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="SWT.javaw" type="win32"/><description>Standard Widget Toolkit</description><dependency><dependentAssembly><assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/></dependentAssembly></dependency></assembly> ???
如果編譯后的exe文件名為:test.exe
???那么新建:test.exe.manifest: ??????<?xml version="2.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity ??? version="0.64.1.0" ??? processorArchitecture="x86" ??? name="Controls" ??? type="win32" /> <description>wxWindows application</description> <dependency> ??? <dependentAssembly> ??????? <assemblyIdentity ??????????? type="win32" ??????????? name="Microsoft.Windows.Common-Controls" ??????????? version="6.0.0.0" ??????????? processorArchitecture="X86" ??????????? publicKeyToken="6595b64144ccf1df" ??????????? language="*" ??????? /> ??? </dependentAssembly> </dependency> </assembly> 我們只要在文件開頭添加:
在swt代碼中有一個段:
#define OS_NATIVE(func) Java_org_eclipse_swt_internal_gtk_OS_##func 如果宏代替OS_NATIVE(foo),這樣就會產(chǎn)生這樣一個代替Java_org_eclipse_swt_internal_gtk_OS_foo. 非常實用! |