㈠ vs2013此項目已經過期影響編譯嗎
不影響編譯
1、一種顯而易見的方案就是找到這個不存在的文件,直接從工程的文件列表裡面刪除即可,如果工程小,倒是可以這么干,如果工程很大,那就是體力活了
2、還有一個方法是開發一個工具,解析下VS2010的vcxproj工程文件,這是個XML文件,解析並不困難,把裡面的文件都校驗一下,把不存在的文件直接找出來
3、還是一個方法是通過DbgView工具[點我下載]來輸出不存在的文件(此方法需要了解VS的devenv的配置的含義,以及一些腳本的配置方法,我不懂,因此依葫蘆畫瓢嘗試了下,發現很簡單!)這種方法需要改下VS2013的IDE的配置文件:devenv.exe.config這個文件的位置%ProgramFiles%MicrosoftVisualStudio10.0Common7IDE或者%ProgramFiles(x86)%MicrosoftVisualStudio10.0Common7IDE(1)用一個文本編輯工具打開devenv.exe.config文件
(2)然後在這行的下面添加如下配置(註:如果是VS2010或者之前的版本第三行請使用)
(4)打開DbgView[下載地址https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview],注意把Capture菜單裡面的CaptureWin32和CaptureEvents勾選上
(5)在VS裡面F5開始調試,等"此項目已經過期"的框彈出來之後,去DbgView的輸出裡面找類似下面的輸出(如果內容很多可以直接查找ismissing或者notuptodate這些關鍵字直接就定位到不存在的文件了
(6)通過這個方法可以把所有不存在的文件都找到並在VS資源管理器中找到並移除,全部移除後發現問題解決!
㈡ yoursoftwareisuptodate是什麼意思
MIVEC(智能可變氣門正時與升程式控制制系統),MIVEC機構是通過ECU發出精確指令控制進氣凸輪軸相位:發動機的ECU在各種行駛工況下自動搜尋一個對應發動機轉速、進氣量、節氣門位置和冷卻水溫度的最佳氣門正時,並控制凸輪軸正時液壓控制閥,並通過各個感測器的信號來感知實際氣門正時,然後再執行反饋控制,補償系統誤差,達到最佳氣門正時的位置,從而能有效地提高汽車的功率與性能,減少耗油量和廢氣排放就好比一個吝嗇的地主,干多少活讓你吃多少飯,一口也不多給。
㈢ delphi xe2怎麼沒activex工具欄
首先,您要了解:
•COM的基本原理
•能被網頁調用的非可視ActiveX控制項必須是一種至少實現了IOleObject介面的TAutoObject組件
•利用Delphi向導生成的ActiveX控制項必須繼承自WinControl,所以您不能用Delphi向導生成非可視的ActiveX控制項
以下例子,實現了一個非可視ActiveX,調用此控制項的exeWB,相當於調用IE的列印,預覽,頁面設置等功能。再此基礎上,還可以擴展其它的功能。
製作步驟:1.打開delphi,新建一個ActiveX包。 File|new|other...|ActiveX|AxtiveX library 2.利用delphi向導,添加一個Automation Object。 File|new|other...|ActiveX|Automation Object 我這個項目叫WebPrint 3.在接下來彈出的TLB編輯窗口裡面定義自己需要的介面函數 我添加需要的介面IWebPrint.print(),IWebPrint.preview()等 4.實現IOleObject介面,將代碼改成如下形式,紅色為修改部分 將Windows添加到uses引用 uses ComObj, ActiveX, Project1_TLB, Windows; 修改 TWebPrint = class(TAutoObject,IWebPrint) 為 TWebPrint = class(TAutoObject,IOleObject , IWebPrint) 添加下段代碼到TWebPrint的private段 private FOleClientSite: IOleClientSite;
添加下段代碼到TWebPrint的public段public
{IOleObject}
function SetClientSite(const clientSite: IOleClientSite): HResult;stdcall;
function GetClientSite(out clientSite: IOleClientSite): HResult;stdcall;
function SetHostNames(szContainerApp: POleStr;szContainerObj: POleStr): HResult; stdcall;
function Close(dwSaveOption: Longint): HResult; stdcall;
function SetMoniker(dwWhichMoniker: Longint; const mk: IMoniker): HResult;stdcall;
function GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint;out mk: IMoniker): HResult; stdcall;
function InitFromData(const dataObject: IDataObject; fCreation: BOOL;dwReserved: Longint): HResult; stdcall;
function GetClipboardData(dwReserved: Longint;out dataObject: IDataObject): HResult; stdcall;
function DoVerb(iVerb: Longint; msg: PMsg; const activeSite: IOleClientSite;lindex: Longint; hwndParent: HWND; const posRect: TRect): HResult;stdcall;
function EnumVerbs(out enumOleVerb: IEnumOleVerb): HResult; stdcall;
function Update: HResult; stdcall;
function IsUpToDate: HResult; stdcall;
function GetUserClassID(out clsid: TCLSID): HResult; stdcall;
function GetUserType(dwFormOfType: Longint; out pszUserType: POleStr): HResult;stdcall;
function SetExtent(dwDrawAspect: Longint; const size: TPoint): HResult;stdcall;
function GetExtent(dwDrawAspect: Longint; out size: TPoint): HResult;stdcall;
function Advise(const advSink: IAdviseSink; out dwConnection: Longint): HResult;stdcall;
function Unadvise(dwConnection: Longint): HResult; stdcall;
function EnumAdvise(out enumAdvise: IEnumStatData): HResult; stdcall;
function GetMiscStatus(dwAspect: Longint; out dwStatus: Longint): HResult;stdcall;
function SetColorScheme(const logpal: TLogPalette): HResult; stdcall;
//在implementation段實現IOleObject的函數功能implementation{IOleObject}function TWebPrint.SetClientSite(const ClientSite: IOleClientSite): HResult;
begin
if ClientSite <> nil then
begin
if FOleClientSite <> nil then
begin
Result := E_FAIL;
Exit;
end;
FOleClientSite := ClientSite;
end
else
begin
FOleClientSite := nil;
end;
Result := S_OK;
end;function TWebPrint.GetClientSite(out clientSite: IOleClientSite): HResult;
begin
ClientSite := FOleClientSite;
Result := S_OK;
end;function TWebPrint.SetHostNames(szContainerApp: POleStr; szContainerObj: POleStr): HResult;
begin
Result := S_OK;
end;function TWebPrint.Close(dwSaveOption: Longint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.SetMoniker(dwWhichMoniker: Longint; const mk: IMoniker): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint; out mk: IMoniker): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.InitFromData(const dataObject: IDataObject; fCreation: BOOL; dwReserved: Longint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.GetClipboardData(dwReserved: Longint; out dataObject: IDataObject): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.DoVerb(iVerb: Longint; msg: PMsg; const activeSite: IOleClientSite; lindex: Longint; hwndParent: HWND; const posRect: TRect): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.EnumVerbs(out enumOleVerb: IEnumOleVerb): HResult;
begin
Result := OleRegEnumVerbs(Factory.ClassID, enumOleVerb);
end;function TWebPrint.Update: HResult;
begin
Result := S_OK;
end;function TWebPrint.IsUpToDate: HResult;
begin
Result := S_OK;
end;function TWebPrint.GetUserClassID(out clsid: TCLSID): HResult;
begin
clsid := Factory.ClassID;
Result := S_OK;
end;function TWebPrint.GetUserType(dwFormOfType: Longint; out pszUserType: POleStr): HResult;
begin
Result := OleRegGetUserType(Factory.ClassID, dwFormOfType, pszUserType);
end;function TWebPrint.SetExtent(dwDrawAspect: Longint; const size: TPoint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.GetExtent(dwDrawAspect: Longint; out size: TPoint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.Advise(const advSink: IAdviseSink; out dwConnection: Longint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.Unadvise(dwConnection: Longint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.EnumAdvise(out enumAdvise: IEnumStatData): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.GetMiscStatus(dwAspect: Longint; out dwStatus: Longint): HResult;
begin
Result := E_NOTIMPL;
end;function TWebPrint.SetColorScheme(const logpal: TLogPalette): HResult;
begin
Result := E_NOTIMPL;
end;5.實現您自己定義的介面函數功能{ITWebPrint}procere TWebPrint.exeWB(cmdID:TOleEnum);
var
spDoc:IHTMLDocument2;
spContainer:IOleContainer;
spIE:IWebBrowser2;
begin
FOleClientSite.GetContainer(spContainer);
if not Assigned(spContainer) then
begin
messagebox(0,'此對象必須作為OLE對象使用','使用方法錯誤',0);
exit;
end; if spContainer.QueryInterface(IID_IHTMLDocument2,spDoc)=S_OK then
begin
if (spDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebBrowser2, spIE)=S_OK then
begin
if spIE.QueryStatusWB(cmdID)=3 then
spIE.ExecWB(cmdID, OLECMDEXECOPT_DODEFAULT,EmptyParam,EmptyParam);
end
else
begin
messagebox(0,'請使用IE5.5以上版本','運行環境不正確',0);
exit;
end;
end
else
begin
messagebox(0,'找不到網頁內容','使用方法錯誤',0);
exit;
網頁鏈接
㈣ up-to-date與up to date區別
up
to
date與to
date的區別和用法
up
to
date與to
date都有
「到目前為止,到現在為止」的意思。表示這種意思的時候,兩者可以通用。例如:
up
to
date
(或to
date)
we
have
no
news
of
him.
到現在為止我們還不知道他的消息。
to
date
(或up
to
date)
twenty
students
have
been
accepted
into
the
school.
到目前為止已有二十名學生被接受入學。
我們通過一下這個句子來看看:
all
our
information
is
kept
right
up
to
date
on
the
computer.
我們貯存在計算機中的所有信息都是不斷更新的。
本句中的片語up
to
date有兩個最主要的意義:一是「切合目前情況的」、「直至目前為止的」;二是「新式的」、「現代化的」。這個片語通常起形容詞的作用,一般在句中作表語或補語,定語常用up-to-date的形式。又如:
that
car
is
a
beauty
and
quite
up
to
date.
那輛小汽車式樣美觀、新穎。
he
is
always
right
up
to
date
in
his
information
about
this
subject.
在這個學科上,他一向掌握最新的信息。
the
yearly
supplement
keep
the
dictionary
up
to
date.
逐年的增補使這部詞典的內容能隨時跟上形勢的發展。
what
he
has
used
is
a
up-to-date
method
of
language
teaching.
他使用的是一種最新的語言教學法。
㈤ windows uptodate是什麼意思
微軟自帶的系統更新程序。
㈥ 發包長度大於1518的發包工具
三款常用IP發包工具介紹
SENDIP 可在各種UNIX 或LINUX 版本中運行,本人使用的是SLACKWARE 8.0 和
REDHAT 9.0 兩個版本。
可在網站http://www.earth.li/projectpurple/progs/sendip.html 中下載最新的源代碼或RPM
包,目前版本為2.5,源碼包大小隻有54K。
2.1.1. 安裝過程
SENDIP 的安裝過程非常簡單,首先從前面介紹的網站中下載最新的源代碼包,目前為
sendip-2.5.tar.gz。
在LINUX 系統中執行:
#tar –xzvf sendip-2.5.tar.gz
#cd sendip-2.5
#make
#make install
在系統的/usr/local/bin 目錄下會產生一個SENDIP 命令文件,同時,在/usr/local/lib 目錄
下建立一個sendip 目錄,並在其下放置ipv4.so、ipv6.so、tcp.so 等與協議相關的模塊文件。
通過在命令行下運行這個文件,我們可以產生各種各樣我們需要的IP 包,還可以通過運行
腳本自動發送大量的IP 包。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第3 頁共14 頁
2.1.2. 發包方法
SENDIP 可以發送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各種格式的
數據包,SENDIP 本身是以模塊的方式發送各種協議的數據包,用-p 參數指定協議類型,要
發送每種協議的數據包, 必須對該協議的數據包格式有一定的了解。通常發送
TCP/UDP/ICMP 數據包時,都必須以IP 包進行封裝,然後才可以發出去。本節我們將以TCP
數據包為例進行講述。
下面介紹一下SENDIP 的命令行格式,以下為直接執行SENDIP 時的輸出:
Usage: sendip [-v] [-d data] [-h] [-f datafile] [-p mole] [mole options] hostname
-d data add this data as a string to the end of the packet
Data can be:
rN to generate N random(ish) data bytes;
0x or 0X followed by hex digits;
0 followed by octal digits;
any other stream of bytes(以指定位元組的隨機數據填充包中的數據段)
-f datafile read packet data from file(以指定數據文件中的內容填充包中的數據段)
-h print this message(輸出幫助信息)
-p mole load the specified mole (see below)(指定協議類型)
-v be verbose(運行時輸出詳細運行信息,如不指定,運行時不輸出信息)
(協議類型是以模塊的方式指定的,用-p 參數指定)
Moles are loaded in the order the -p option appears. The headers from
each mole are put immediately inside the headers from the previos model in
the final packet. For example, to embed bgp inside tcp inside ipv4, do
sendip -p ipv4 -p tcp -p bgp ....
Moles available at compile time:
ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的協議類型)
通常執行格式如下:
#sendip –v –d r64 –p ipv4 –iv 4 –ih 5 –il 128 –is 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-v:運行時輸出詳細運行信息,如不指定,運行時不輸出信息
–d r64:用64 位元組的隨機數值填充IP 包中的數據段
–p ipv4:指定協議類型為IP 協議(IP 協議有自己的相應參數,以i 開頭)
–iv 4:協議版本為4,即IPV4
–ih 5:指定IP 頭的長度為5×4=20 位元組
–il 128:指定IP 包的總長度為128 位元組
–is 10.0.0.1:指定IP 包的源地址
–id 30.0.0.1:指定IP 包的目的地址
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第4 頁共14 頁
–p tcp:指定IP 包中封裝的包的協議類型(TCP 協議有自己的相應參數,以t 開頭)
–ts 1379:指定TCP 包的源埠1379
–td 23:指定TCP 包的目的埠為23
-tt 8:指定TCP 包的偏移量即TCP 頭的長度,沒有TCP 選項時為5,即20 字
節,有TCP 選項時需要增加。
30.0.0.1:指定發包的目的主機
以上部分為利用SENDIP 發送一個簡單的TCP 數據包的方法,下面結合IP 和TCP 數據
包的格式詳細介紹IP 和TCP 協議的各種參數。
具體各種協議的數據包格式可參考TCP/IP 協議中對各種協議數據包格式的介紹,下面
我們只介紹IP 數據包的格式和TCP 數據包的格式:
IP 數據包的格式:
根據IP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的IP 數據包中參數的
值。
Field name
Size
(bits)
SendIP
option
Description
Version 4 -iv Always 4(對應「4 位版本」,通常值為4,表示IPV4)
Header length 4 -ih
IP header length, measured in 32bit words, 5 if there are
no options(對應「4 位首部長度」,表示以32 位即4
位元組為單位的IP 首部長度,如果沒有IP 參數的話,
通常為5,表示首部長度為20 位元組,如有IP 參數的
話,需要調整該值)
Type of
Service/Differentiated
Services
8 -iy
服務類型(TOS)欄位由8 位組成,其中包括3 位的
優先權欄位(現已被忽略)、4 位的TOS 子欄位和1
位未用位但必須置0,4 位TOS 子欄位分別代表最小
時延、最大吞吐量、最高可靠性和最小費用。4 位只
能置其中1 位,使用時只要將設置相應位後運算出十
進制值即可。如要設置最大吞吐量位(00001000),只
需添加參數iy 8 即可。
Total Length 16 -il Total length of IP packet including header and data,
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第5 頁共14 頁
measured in octets(指定IP 包的總長度,包括IP 頭部
分和數據部分,以8 位位元組為單位,最長為65535)
Identification 16 -ii
Used to help reassembled fragmented packets(指定IP
包的標識號,用來幫助重新組裝分段的IP 包)
-ifr 1 bit: reserved, should be 0
-ifd 1 bit: don't fragment(可指定-ifd x,下可為0、1 或r) Flags 3
-ifm 1 bit: more fragmets(可指定-ifm x,下可為0、1 或r)
Fragment offset 13 -if
Where in the reconstructed datagram this fragment
belongs, measured in 64bit words starting from 0(以8
位元組長度為單位,指定段偏移量)
Time to Live 8 -it
Number of routers the packet can pass through before
being discarded(值的范圍從0 到255,指定TTL,表
示該包可通過的路由器的數目,用於防止包在循環路
徑上無休止地傳遞)
Protocol 8 -ip
Protocol associated with the data. See iana for an
uptodate list of assigned numbers(用於定義IP 包內部
封裝的上層協議的協議號,如TCP 為6,可在IANA
的網站上
http://www.iana.org/assignments/protocol-numbers
獲得最新的協議號表)
Header checksum 16 -ic
Checksum of the IP header data (with checksum set to
zero)(可指定IP 首部校驗和的值,通常由SENDIP 自
動生成,不指定該參數,除非要發出帶有錯誤校驗和
的包)
Source Address 32 -is Duhh...(源地址,以點分十進制方式表示)
Destination Address 32 -id Cabbage(目的地址,以點分十進制方式表示)
Options Variable -io...
No options are required. Any number can be added. See
below for details(定義各種IP 選項,如果定義了IP
選項,則前面的IP 頭的長度值要包括IP 選項的長度,
不帶IP 選項時,該值為20,帶IP 選項時,可設定該
值,如果要故意製造不匹配的包,可不符合規范。)
如果有IP 選項,還可指定IP 選項的值,SENDIP 支持的IP 選項如下表所示。
Name
SendIP
option
RFC Copy Class Number
Type
(see
above)
Length
(0 not
present)
Description
EOL -ioeol 791 0 0 0 0 0
Used as padding if needed
(使用該選項後,會自動在IP 頭
中未用到的位補0)
NOP -ionop 791 0 0 1 1 0
Do nothing. Often used as padding
so the next option starts on a 32 bit
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第6 頁共14 頁
boundary
RR -iorr 791 0 0 7 7 variable
Used to record the route of a
packet.(記錄包走過的每個路由
器, 通常用法是: -iorr
0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中
iorr 表示記錄路由,此時系統會自
動將IP 選項號置為07,0f 表示指
針,即記錄的最後一個IP 地址的
指針,系統會自動運算該IP 選項
的長度)
TS -iots 791 0 2 4 68 variable
Used to record the time at which a
packet was processed by an
intermediate system
LSR -iolsr 791 1 0 3 131 vairable
Loose Source Route - let the
source specify the route for a
packet.
SID -iosid 791 1 0 8 136 4
Rarely used, carries the SATNET
stream identifier.
SSR -iossr 791 1 0 9 137 variable
Strict Source Route - same as LSR,
but extra hops are not allowed.
SEC
791,
1108
1 0 2 130 variable Security, rarely used
E-SEC 1108 1 0 5 133 variable Extended Security, rarely used
通常在SENDIP 中指定IP 選項時,格式比較特別,下面我們以RR 記錄路由選項為例
介紹一下,如果要發送一個記錄三個IP 的數據包,需要考慮如下,一是指定IP 頭的長度要
包括IP 選項的長度,而是要指定RR 記錄路由選項的指針位置和IP 地址(本來是由系統自
動記錄IP 和更新指針位置,但現在必須手工指定),那麼記錄三個IP 包後,指針的位置應
是3+4×3+1=16,造好後,數據包的格式應該如下:
IP 頭07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp
20B RR len ptr 4bytes 4bytes 4bytes Ptr
具體命令行如下:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-ih 10 表示IP 頭的長度為10×4 為40 個位元組,去除標準的20 個位元組長度,為IP
選項預留為20 個位元組
-iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一個10 表示用16 進製表示的指針的
位置,後面為用冒號分隔的三個用點分十進製表示的IP 地址
-ioeol 表示用00 結束IP 選項,並用隨機數填充後面未用的IP 頭位置
以上部分只是以RR 記錄路由IP 選項為例,介紹了sendip 中指定IP 選項的方法,當然
也可以根據自己的要求發送IP 選項不符合常規的數據包。其他的IP 選項與此雷同,但發送
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第7 頁共14 頁
前需要詳細了解IP 選項的格式,才可正確發送。
TCP 數據包的格式:
根據TCP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的TCP 數據包中參
數的值。
Field name
Size
(bits)
SendIP
option
Description
Source port 16 -ts
Source port number for the connection
(以十進制的方式指定TCP 原埠)
Destination port 16 -td
Destination port number
(以十進制的方式指定TCP 目的埠)
Sequence number 32 -tn
Number of the first data octet in this packet. If SYN bit is
set, this is the number of the first data octet of the stream
too.(指定TCP 序列號,如果不指定則隨機產生)
Acknowledgment
number
32 -ta
If ACK bit is set, the next sequence number the sender is
expecting to receive.
Data offset 4 -tt
Length of TCP header in 32 bit words(指定TCP 頭的長
度,單位是以32bits 也就是4 位元組為單位)
Reserved 4 -tr
Should be 0. Note, rfc793 defines this as a 6 bit field, but
the last 2 are used by rfc2481 for ECN as below.
Flags: ECN 1 -tfe
Flags: CWR 1 -tfc
ECN extension flags, see rfc2481. (指定TCP 標志位,
如果要打開哪一位,就在命令行參數中指定相應位的
值,如要設置SYN 狀態,只需在命令行加入-tfs 1 即可
)
Flags: URG 1 -tfu Urgent pointer is significant(同上)
Flags: ACK 1 -tfa Acknowledgment field is significant(同上)
Flags: PSH 1 -tfp Push function(同上)
Flags: RST 1 -tfr Reset the connection(同上)
Flags: SYN 1 -tfs Synchronize sequence numbers(同上)
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第8 頁共14 頁
Flags: FIN 1 -tff No more data from sender(同上)
Window 16 -tw
Number of octet starting from the one in the
Acknowledgement field that the sender is willing to
accept
Checksum 16 -tc
Checksum of the TCP header (with checksum set to 0),
data, and a psuedo-header including the source and
destination IP addresses, IP protocol field and a 16 bit
length of the TCP header and data.
Urgent pointer 16 -tu
If URG bit is set, tHe offset of the last octet of urgent data
in this packet.
Options Variable -to...
No options are required. Any number can be added. See
below for details.
如果有TCP 選項,還可指定TCP 選項的值,SENDIP 支持的TCP 選項如下表所示。
Name
SendIP
option
RFC Type
Length (0
not
present)
Description
EOL -toeol 793 0 0
Used as padding if needed(用00 填充,表示TCP
選項結束,把TCP 頭後面的位置用隨機數填充)
NOP -tonop 793 1 0
Do nothing. Often used as padding so the next
option starts on a 32 bit boundary
MSS -tomss 793 2 4
Specify the maximum recieve segment size of the
sender as a 16 bit number. Only valid when SYN is
also set
WSOPT -towscale 1323 3 3
The window size should be leftshifted by the value
of the option (an 8 bit number). Only valid when
SYN is also set.
SACKOK -tosackok 2018 4 2
Selective Acknowledgement is permitted on this
connection
SACK -tosack 2018 5 variable
Selective Acknowledgement of non-contiguous
blocks of data. The data in the option is a series of
(left edge)-(right edge) pairs giving, respectively,
the first sequence number the has been recieved and
the first that hasn't.
TSOPT -tots 1323 8 10
Timestamp. The first 4 bytes (TSval) are the time
that the packet was sent, the remaining 4 (TSecr)
echo the TSval of a packet that was recieved. TSecr
is only valid when the ACK bit is set.
從上表所示,可以看出,TCP 選項可能只有一個單位元組參數,如-toeol 和-tonop,也可
能由一個Type 號和一個length 長度以及該length 長度指定的位元組數的數據組成的參數,使
用時sendip 會自動運算length 的長度,所以,不能隨意設定TCP 選項的長度,但需要設定
TCP 選項的值。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第9 頁共14 頁
在設定TCP 選項時,同樣要考慮到TCP 頭的長度要包括TCP 選項的長度。
TCP 選項數據包的格式大致如下:
Kind=3 Len=3 數據:移位數
TCP 選項號TCP 選項長度TCP 選項數據佔一個位元組,總長度為三個位元組
具體命令行格式可參照如下格式:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1
-towscale 0 :指設置TCP 選項3,長度為自動3,TCP 選項的值即移位數為0
-toeol :表示TCP 選項結束,後面用隨機數填滿TCP 頭
因為用SENDIP 設定TCP 選項時,不能設定長度,所以,如果要設定長度不正確的包,
還要藉助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 發送的包後,再將對應的TCP
選項的長度改為不規則的值即可。
根據前面介紹的內容,我們已經基本可以掌握用SENDIP 發送各種協議數據包的方法,
當然我們還可以利用他發送各種不符合標準的數據包,如校驗和錯誤、長度不正確、狀態位
不正確等各種我們需要的數據包,在使用時,建議與SNIFFER 搭配使用,以驗證SENDIP
發出的包是否正確,進行有針對性的測試。
2.2. NESSUS 工具
NESSUS 是一個非常龐大的工具,它可以提供功能完善的安全掃描服務,還可以提供全
面的發包功能,用以構造各種格式的網路通信包。本篇只關注NESSUS 的發包功能。
NESSUS 由兩個部分組成,一部分是伺服器,通常運行在POSIX 系統如LINUX/UNIX
系統中,負責掃描和攻擊,並收集數據,另一部分是客戶端,可以運行在LINUX/UNIX 系
統或WINDOWS 系統中,負責接收和顯示數據。
如果只是用來發包,則只需要服務端即可。
NESSUS 有專門的維護網站,可以隨時到http://www.nessus.org 網站下載最新的源代碼,
並獲得全面的幫助。目前,NESSUS 最新的版本為2.0.8a。
2.2.1. NESSUS 安裝方法
安裝NESSUS 前要知道NESSUS 可能需要的支撐軟體包,一個是GTK,通常POSIX
系統下的NESSUS 客戶端需要GTK,如果你的系統安裝了GTK,則必須確保安裝了
gtk-config 程序,可到ftp://ftp.gimp.org/pub/gtk/v1.2 網站下載最新的GTK 程序,如果只在
LINUX/UNIX 系統下安裝服務端,則可以不需要GTK 包;另一個是OPENSSL 包,如果希
望客戶端和服務端的通信採用SSL 方式,則需要OPENSSL 包,可到http://www.openssl.org/
下載最新的OPENSSL 包,OPENSSL 包是可選的。
NESSUS 有三種安裝方法:第一種是利用LINUX 下的LYNX 工具直接從網上安裝,這
種方法很容易,但安全性低,在此不予詳細介紹,可到NESSUS 網站上獲取相關信息。第
二種方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安裝,這種方法簡單且安全性
比較高。第三種方法是獲取源碼包,然後分別編譯再進行安裝。下面分別介紹第二種和第三
種方法。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第10 頁共14 頁
2.2.1.1. 採用nessus-installer.sh 方式安裝
從NESSUS 網站下載最新的nessus-installer.sh 文件到本地LINUX 目錄,然後執行
#sh nessus-installer.sh
系統會自動安裝NESSUS 到你的系統中,中間會需要你提供相關的提示信息,一直按
回車即可。
2.2.1.2. 採用源碼包方式安裝
如果採用源碼包方式進行安裝,需要下載四個軟體包,並按順序進行安裝。四個軟體包
分別如下:
nessus-libraries
libnasl
nessus-core
nessus-plugins
安裝時必須按順序安裝這四個軟體包。
安裝前,我們必須獲得上面所說的四個軟體包,目前版本為2.0.8a:
nessus-libraries-x.x.tar.gz
libnasl-x.x.tar.gz
nessus-core.x.x.tar.gz
nessus-plugins.x.x.tar.gz
然後開始進行安裝。
1. 安裝nessus-libraries
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure
#make
#make install
2. 安裝libnasl-x.x.tar.gz (執行與上面相同的操作)
3. 安裝nessus-core.x.x.tar.gz(執行與上面相同的操作)
4. 安裝nessus-plugins.x.x.tar.gz (執行與上面相同的操作)
5. 如果使用的是LINUX 系統,必須確保/usr/local/lib 路徑在/etc/ld.so.conf 文件中,如
果是SOLARIS 系統, 必須執行export LD_LIBRARY_PATH=
$LD_LIBRARY_PATH :/usr/local/lib 命令。
6. 執行ldconfig 命令
7. 如果不想或不能使用GTK 的客戶端,可強制使用命令行方式,這時,在執行第三
步編譯nessus-core 時,可以使用如下命令:
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure --disable-gtk
#make
#make install
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第11 頁共14 頁
執行以上命令後,NESSUS 就已經安裝在您的系統中了。
2.2.2. NESSUS 的發包方法
NESSUS 通常採用腳本方式控制發出的包,下面我們以發送聖誕老人攻擊包為例,來介
紹如何利用NESSUS 發送數據包。
聖誕老人包是通過發送TCP Flag 中同時有SYN 和FIN 標志的數據包,穿透防火牆,
來達到攻擊的目的。
為使用NESSUS 發送攻擊包,首先要定義一個腳本,在LINUX 下,執行vi sendp 命令,
輸入如下內容:
srcaddr=this_host(); 註:自動獲取當前主機的IP 地址
ip = forge_ip_packet( ip_v : 4, 註:IP 協議版本為IPV4
ip_hl : 5, 註:IP 頭的長度為5×4=20 位元組
ip_tos : 0,
ip_len : 40, 註:在這里輸入實際的長度40,因為IP 頭和TCP 頭都為20
ip_id : 0xABA,
ip_p : IPPROTO_TCP, 註:內部數據包協議為TCP
ip_ttl : 255,
ip_off : 0,
ip_src : srcaddr); 註:可在此直接輸入IP
port = get_host_open_port(); 註:自動獲取當前主機上的可用埠
if(!port)port = 139; 註:如果沒有可用埠,就自動使用139 埠
tcpip = forge_tcp_packet( ip : ip, 註:表示IP 層協議採用前面定義的IP 協議包
th_sport : port, 註:可在這里直接輸入埠
th_dport : port, 註:可在這里直接輸入埠
th_flags : TH_SYN|TH_FIN, 註:設置TCP 狀態的SYN 和FIN 標志位
th_seq : 0xF1C,
th_ack : 0,
th_x2 : 0,
th_off : 5, 註:TCP 頭的長度位5×4=20 位元組
th_win : 512,
th_urp : 0);
result = send_packet(tcpip,pcap_active:FALSE);
編輯完上面的腳本後,保存退出,運行如下命令:
#nasl –t 目的IP 地址測試腳本
如:
#nasl –t 10.0.0.227 sendp
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第12 頁共14 頁
通過Sniffer 抓包,就會發現有相應的聖誕老人包。
在我的使用過程中,發現NESSUS 好像不支持發送帶有IP 或TCP 選項的包。
具體發包的參數可參考http://www.nessus.org/doc/nasl.html
2.3. SNIFFER 工具
用SNIFFER 發包時,有兩種方式,一種是直接利用Packet Generator 工具,從0 開始用
16 進制的方式造一個數據包,這種方法難度較高,因為要自己算出校驗和,除非需要重現
在網路上抓到的一個16 進制格式的數據包,另外一種方式是利用已經抓到的數據包修改一
下,再發送出去,具體實現方法分別如下。
2.3.1. 利用Packet Generator 直接造包
在SNIFFER 中,選擇Tools|Packet Generator 菜單,系統彈出窗口如下:
按圖中的紅色框中的按鈕,系統會彈出一個構造包內容的對話框,如下所示:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第13 頁共14 頁
在上圖中可輸入包的內容,還可規定發包的個數和包的長度。
2.3.2. 利用已抓的包發包
利用已抓的包進行修改,可以避免大量的運算和輸入,只需要更改自己需要更改的地方,
然後發出去即可。
如上圖所示,按包的大致要求,用其他工具造好包後,用SNIFFER 抓包,或者直接將
網路上的可疑包抓過來,然後,用滑鼠郵件單擊該包,彈出如上圖所示的快捷菜單,從中選
擇Send Current Frame 菜單,系統就會彈出如下圖所示的發包窗口:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第14 頁共14 頁
按要求更改包的內容,即可發送。需要注意的是如果更改了IP 地址或其他頭中的內容,
則需要更新校驗和,對MAC 或選項的更改不需要更改校驗和。
3. 總結
通過對比前面的三種發包工具,我們發現每種工具都有自己的優點和缺點,SENDIP 比
較短小而且功能較齊全,比較適合在日常測試中使用,SNIFFER 發包工具最自由,可以發
出任何可能的數據包,NESSUS 工具功能比較全面,但在發包方面不如SENDIP,所以,建
議如果是測試需要的話,應該採用SENDIP 和SNIFFER 相結合的方式,如果同時還要使用
掃描等其他功能,可以採用NESSUS 工具。
㈦ latest與uptodate區別
lastest可以用來形容最近有什麼事發生 up to date更趨向於最新的;更新;跟上時代潮流的這種感覺
㈧ It is up to you 是什麼意思
1.It
is
up
to
you.
隨你便。收藏指正
2.It
is
up
to
you
to
decide.
這事由你定奪。收藏指正
3.It
is
up
to
you
to
break
the
news
to
him.
該由你把這個消息告訴她。收藏指正
4.It
is
up
to
you
to
decide.;
It's
to
be
decided
by
you.;
We'll
leave
it
to
you
for
decision.
這事由你定奪。收藏指正
5.I'd
give
you
my
advice;
whether
or
not
you
act
on
it
is
up
to
you.
辦法我已經告訴你了;是否照辦是你的事。收藏指正
6.Then
it
is
up
to
you
to
accessorize
with
beads,
feathers,
fur,
hats
or
anything
else
that
takes
your
fancy.
之後,是搭配珠子、羽毛、毛皮、帽子,還是你所喜好的其它什麼東西,就由你來定了。收藏指正
7.I
won't
promise
to
be
up
to
see
you
off.
You
know
how
it
is—the
spirit
is
willing
but
the
flesh
is
weak.
我不會答應起身送你。你知道其中的緣故—我是力不從心哪。收藏指正
8.Make
sure
you
have
a
good
antivirus
proct
and
it
is
kept
up
to
date.
確信你已經有一個好的反病毒產品,並且保持最新。收藏指正
9.It
is
about
time
you
squared
up
to
the
fact
that
you
have
a
drinking
problem.
該是你正視自己酗酒問題的時候了。收藏指正
10.It
is
no
good
making
up
to
your
brother
,
he
will
not
help
you
.
向你哥哥獻殷勤沒有用,他不會幫你的。收藏指正
主要的最常見的
就是
由你決定
取決於你
在具體句子做適當解釋
㈨ 如何從一個 OCX 獲取 IDispatch Excel 或 Word 文檔的
執行步驟的示例
創建名為 OffCntrDisp 的新 MFC ActiveX 控制項向導應用程序。
COleControl 派生類中添加下面的成員變數:
char m_szDocName[512];
IDispatch *m_pDocDisp;
註: m_szDocName 保存包含我們的控制的文檔的名稱並且 m_pDocDisp 是該文檔的 IDispatch 介面。
COleControl 派生類定義中的末尾添加以下項:
// Interface Maps.
protected:
// IoleObject.
BEGIN_INTERFACE_PART(MyOleObject, IOleObject)
INIT_INTERFACE_PART(COffCtlDispCtrl, MyOleObject)
STDMETHOD(SetClientSite)(LPOLECLIENTSITE);
STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);
STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);
STDMETHOD(Close)(DWORD);
STDMETHOD(SetMoniker)(DWORD, LPMONIKER);
STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);
STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);
STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND,
LPCRECT);
STDMETHOD(EnumVerbs)(IEnumOLEVERB**);
STDMETHOD(Update)();
STDMETHOD(IsUpToDate)();
STDMETHOD(GetUserClassID)(CLSID*);
STDMETHOD(GetUserType)(DWORD, LPOLESTR*);
STDMETHOD(SetExtent)(DWORD, LPSIZEL);
STDMETHOD(GetExtent)(DWORD, LPSIZEL);
STDMETHOD(Advise)(LPADVISESINK, LPDWORD);
STDMETHOD(Unadvise)(DWORD);
STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);
STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);
STDMETHOD(SetColorScheme)(LPLOGPALETTE);
END_INTERFACE_PART(MyOleObject)
DECLARE_INTERFACE_MAP();
這將重寫您的自定義 MyOleObject 與 IOleObject COleControl 的默認實現。
COleControl 派生類的構造函數中添加以下代碼:
m_pDocDisp = NULL;
緊隨其後 OffCntrDispCtl.cpp 中的以下行:
IMPLEMENT_OLECTLTYPE(COffCntrDispCtrl, IDS_OFFCNTRDISP,
_dwOffCntrDispOleMisc)
添加以下代碼:
BEGIN_INTERFACE_MAP(COffCntrDispCtrl, COleControl)
INTERFACE_PART(COffCntrDispCtrl, IID_IOleObject, MyOleObject)
END_INTERFACE_MAP()
此操作,請在步驟 3 中所做的修改以及覆蓋 COleControl 的 IOleObject。
第 5 步中添加的代碼,下面添加以下代碼:
static char buf[8192];
static void DoMsg(char *msg) {
::MessageBox(NULL, msg, "Message", MB_SETFOREGROUND);
}
static void DoErr(char *msg, long err) {
static char errBuf[8192];
sprintf(errBuf, "%s, Error: %ld (%08lx)", msg, err,err);
::MessageBox(NULL, errBuf, "Error", MB_SETFOREGROUND);
}
這些都是以後用於顯示郵件的有用常式。
將粘貼的所有以下代碼在您的 OffCntrDispCtl.cpp 文件的末尾:
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetHostNames(LPCOLESTR
pwApp, LPCOLESTR pwObj)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
// Convert OLESTR into ASCII string.
WideCharToMultiByte(CP_ACP, 0, pwObj, -1, pThis->m_szDocName,
512, NULL, NULL);
// Get IDispatch.
pThis->GetDocDispatch();
// Test it out by getting the document name.
pThis->TestDispatch();
return S_OK;
}
STDMETHODIMP
COffCntrDispCtrl::XMyOleObject::SetClientSite(LPOLECLIENTSITE
pClientSite)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.SetClientSite(pClientSite);
}
STDMETHODIMP
COffCntrDispCtrl::XMyOleObject::SetColorScheme(LPLOGPALETTE plp)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.SetColorScheme(plp);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetMiscStatus(DWORD
dwAspect, DWORD* pdwStatus)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetMiscStatus(dwAspect, pdwStatus);
}
STDMETHODIMP
COffCntrDispCtrl::XMyOleObject::EnumAdvise(LPENUMSTATDATA*
ppenumAdvise)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.EnumAdvise(ppenumAdvise);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Unadvise(DWORD
dwConnection)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Unadvise(dwConnection);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Advise(LPADVISESINK
pAdvSink, DWORD* pdwConnection)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Advise(pAdvSink, pdwConnection);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetExtent(DWORD
dwDrawAspect, LPSIZEL lpsizel)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetExtent(dwDrawAspect, lpsizel);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetExtent(DWORD
dwDrawAspect, LPSIZEL lpsizel)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.SetExtent(dwDrawAspect, lpsizel);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetUserType(DWORD
dwFormOfType, LPOLESTR* ppszUserType)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetUserType(dwFormOfType,
ppszUserType);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetUserClassID(CLSID*
pClsid)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetUserClassID(pClsid);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::IsUpToDate()
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.IsUpToDate();
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Update()
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Update();
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::EnumVerbs(LPENUMOLEVERB*
ppenumOleVerb)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.EnumVerbs(ppenumOleVerb);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::DoVerb(LONG iVerb, LPMSG
lpmsg, LPOLECLIENTSITE pActiveSite, LONG lindex, HWND hwndParent,
LPCRECT lprcPosRect)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.DoVerb(iVerb, lpmsg, pActiveSite,
lindex, hwndParent, lprcPosRect);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetClipboardData(DWORD
dwReserved, LPDATAOBJECT *ppDataObject)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetClipboardData(dwReserved,
ppDataObject);
}
STDMETHODIMP
COffCntrDispCtrl::XMyOleObject::InitFromData(LPDATAOBJECT
pDataObject, BOOL fCreation, DWORD dwReserved)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.InitFromData(pDataObject, fCreation,
dwReserved);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetMoniker(DWORD
dwAssign, DWORD dwWhichMoniker, LPMONIKER *ppmk)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetMoniker(dwAssign, dwWhichMoniker,
ppmk);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetMoniker(DWORD
dwWhichMoniker, LPMONIKER pmk)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.SetMoniker(dwWhichMoniker, pmk);
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Close(DWORD
dwSaveOption)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Close(dwSaveOption);
}
STDMETHODIMP
COffCntrDispCtrl::XMyOleObject::GetClientSite(LPOLECLIENTSITE*
ppClientSite)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.GetClientSite(ppClientSite);
}
STDMETHODIMP_(ULONG) COffCntrDispCtrl::XMyOleObject::Release()
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Release();
}
STDMETHODIMP_(ULONG) COffCntrDispCtrl::XMyOleObject::AddRef()
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.AddRef();
}
STDMETHODIMP COffCntrDispCtrl::XMyOleObject::QueryInterface(REFIID
iid, LPVOID* ppvObj)
{
METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.QueryInterface(iid, ppvObj);
}
這是您的 IOleObject,通常將委託其調用默認 COleControl 的 IOleObject 實現,除 SetHostNames() 之外的所有實現。補漏白,SetHostNames(),並存儲該文檔的名稱插入控制項的位置。
遺憾的是,Microsoft PowerPoint 不能調用此方法,因此,此示例將不會使用該產品。但是,Microsoft Powerpoint 是單個伺服器,因此您可以使用 GetActiveObject() 來唯一獲得 IDispatch 指針。
㈩ our business is up to date 是什麼意思
謝謝您的解答,但是好像不是這個意思哦,大家再幫我想想可以嗎
?謝謝!
我跟這個客戶還沒做成生意呢,跟他已經洽談兩個多月了,說給我下單子,可是一直到現在也沒下,前幾天給他發郵件,他給我回復了這樣一封,我就是不明白他的our
business
is
up
to
date是什麼意思,期望您的解答...