锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美伊人久久大香线蕉综合,国产精品久久久久久久久,色综合久久久久http://www.shnenglu.com/limk/archive/2008/07/30/57531.html鏉庢槑鍧?/dc:creator>鏉庢槑鍧?/author>Wed, 30 Jul 2008 09:14:00 GMThttp://www.shnenglu.com/limk/archive/2008/07/30/57531.htmlhttp://www.shnenglu.com/limk/comments/57531.htmlhttp://www.shnenglu.com/limk/archive/2008/07/30/57531.html#Feedback0http://www.shnenglu.com/limk/comments/commentRss/57531.htmlhttp://www.shnenglu.com/limk/services/trackbacks/57531.html

C++           杈撳叆杈撳嚭    C#
==================================
char chr[255]   O    StringBuilder
KCA_DIR            I    int
LPCSTR             I    string
int                        I    int
LPSTR              O    StringBuilder
int*                      O    out int
DWORD              I    int
DWORD*          O    out int
BOOL                 I    bool
Rc_DBMgr          I    IntPtr
long*                  O    out long

 

API涓嶤#鐨勬暟鎹被鍨嬪搴斿叧緋昏〃
API鏁版嵁綾誨瀷 綾誨瀷鎻忚堪 C#綾誨瀷 API鏁版嵁綾誨瀷 綾誨瀷鎻忚堪 C#綾誨瀷
WORD 16浣嶆棤絎﹀彿鏁存暟 ushort CHAR 瀛楃 char
LONG 32浣嶆棤絎﹀彿鏁存暟 int DWORDLONG 64浣嶉暱鏁存暟 long
DWORD 32浣嶆棤絎﹀彿鏁存暟 uint HDC 璁懼鎻忚堪琛ㄥ彞鏌?/td> int
HANDLE 鍙ユ焺,32浣嶆暣鏁?/td> int HGDIOBJ GDI瀵硅薄鍙ユ焺 int
UINT 32浣嶆棤絎﹀彿鏁存暟 uint HINSTANCE 瀹炰緥鍙ユ焺 int
BOOL 32浣嶅竷?yōu)當鍨嬫暣鏁?/td> bool HWM 紿楀彛鍙ユ焺 int
LPSTR 鎸囧悜瀛楃鐨?2浣嶆寚閽?/td> string HPARAM 32浣嶆秷鎭弬鏁?/td> int
LPCSTR 鎸囧悜甯稿瓧絎︾殑32浣嶆寚閽?/td> String LPARAM 32浣嶆秷鎭弬鏁?/td> int
BYTE 瀛楄妭 byte WPARAM 32浣嶆秷鎭弬鏁?/td> int

 

Wtypes.h 涓殑闈炴墭綆$被鍨?/span>

闈炴墭綆?/span> C 璇█綾誨瀷

鎵樼綾誨悕

璇存槑

HANDLE

void*

System.IntPtr

32 浣?/span>

BYTE

unsigned char

System.Byte

8 浣?/span>

SHORT

short

System.Int16

16 浣?/span>

WORD

unsigned short

System.UInt16

16 浣?/span>

INT

int

System.Int32

32 浣?/span>

UINT

unsigned int

System.UInt32

32 浣?/span>

LONG

long

System.Int32

32 浣?/span>

BOOL

long

System.Int32

32 浣?/span>

DWORD

unsigned long

System.UInt32

32 浣?/span>

ULONG

unsigned long

System.UInt32

32 浣?/span>

CHAR

char

System.Char

鐢?/span> ANSI 淇グ銆?/span>

LPSTR

char*

System.String 鎴?/span> System.StringBuilder

鐢?/span> ANSI 淇グ銆?/span>

LPCSTR

Const char*

System.String 鎴?/span> System.StringBuilder

鐢?/span> ANSI 淇グ銆?/span>

LPWSTR

wchar_t*

System.String 鎴?/span> System.StringBuilder

鐢?/span> Unicode 淇グ銆?/span>

LPCWSTR

Const wchar_t*

System.String 鎴?/span> System.StringBuilder

鐢?/span> Unicode 淇グ銆?/span>

FLOAT

Float

System.Single

32 浣?/span>

DOUBLE

Double

System.Double

64 浣?/span>



]]>
C#鎿嶄綔INI綾?/title><link>http://www.shnenglu.com/limk/archive/2008/07/30/57530.html</link><dc:creator>鏉庢槑鍧?/dc:creator><author>鏉庢槑鍧?/author><pubDate>Wed, 30 Jul 2008 09:10:00 GMT</pubDate><guid>http://www.shnenglu.com/limk/archive/2008/07/30/57530.html</guid><wfw:comment>http://www.shnenglu.com/limk/comments/57530.html</wfw:comment><comments>http://www.shnenglu.com/limk/archive/2008/07/30/57530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/limk/comments/commentRss/57530.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/limk/services/trackbacks/57530.html</trackback:ping><description><![CDATA[<p><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)"> System; <br></span><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)"> System.IO; <br></span><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)"> System.Runtime.InteropServices; <br></span><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)"> System.Text;<br><br><br></span><span style="COLOR: rgb(0,0,255)">namespace</span><span style="COLOR: rgb(0,0,0)"> OperateIni<br>{<br></span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">class</span><span style="COLOR: rgb(0,0,0)"> IniFile<br>{ <br>  </span><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> IniFileName; <br><br>   [DllImport(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">kernel32</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)] <br>  </span><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">static</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">extern</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> GetPrivateProfileInt(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpAppName, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpKeyName, <br>   </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> nDefault, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpFileName); <br><br>   [DllImport(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">kernel32</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)] <br>  </span><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">static</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">extern</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> GetPrivateProfileString(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpAppName, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpKeyName, <br>   </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpDefault, StringBuilder lpReturnedString, </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> nSize, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpFileName); <br><br>   [DllImport(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">kernel32</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)] <br>  </span><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">static</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">extern</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">bool</span><span style="COLOR: rgb(0,0,0)"> WritePrivateProfileString(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpAppName, <br>   </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpKeyName, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpString, </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> lpFileName); <br><br>  </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> IniFile(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Filename) <br>   {<br>       IniFileName </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Filename; <br>   } <br>  <br>  </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> ReadIni(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Section,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Key,</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> Default) <br>   { <br>      </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> GetPrivateProfileInt(Section,Key,Default,IniFileName); <br>   } <br><br>  </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> ReadIni(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Section,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Key,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Default) <br>   { <br>       StringBuilder temp </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> StringBuilder(</span><span style="COLOR: rgb(0,0,0)">1024</span><span style="COLOR: rgb(0,0,0)">); <br>      </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> rec</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">GetPrivateProfileString(Section,Key,Default,temp,</span><span style="COLOR: rgb(0,0,0)">1024</span><span style="COLOR: rgb(0,0,0)">,IniFileName);<br>      </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> temp.ToString(); <br>   }<br><br>  </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)"> WriteIni(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Section,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Key,</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> intValue) <br>   { <br>       WritePrivateProfileString(Section,Key,intValue.ToString(),IniFileName); <br>   } <br><br>  </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)"> WriteIni(</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Section,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> Key,</span><span style="COLOR: rgb(0,0,255)">string</span><span style="COLOR: rgb(0,0,0)"> strValue) <br>   { <br>       WritePrivateProfileString(Section,Key,strValue,IniFileName); <br>   }<br>} <br>}</span></p> <p>鏈濂芥槸鍔犱笂鍒ゆ柇鏂囦歡鏄惁瀛樺湪錛屼笉瀛樺湪鍒欒繘琛屽垱寤烘枃浠躲侀敊璇鐞嗙瓑鍔熻兘銆?/p><img src ="http://www.shnenglu.com/limk/aggbug/57530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/limk/" target="_blank">鏉庢槑鍧?/a> 2008-07-30 17:10 <a href="http://www.shnenglu.com/limk/archive/2008/07/30/57530.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C#涓皟璇旵++鐨凞LLhttp://www.shnenglu.com/limk/archive/2008/07/30/57529.html鏉庢槑鍧?/dc:creator>鏉庢槑鍧?/author>Wed, 30 Jul 2008 08:54:00 GMThttp://www.shnenglu.com/limk/archive/2008/07/30/57529.htmlhttp://www.shnenglu.com/limk/comments/57529.htmlhttp://www.shnenglu.com/limk/archive/2008/07/30/57529.html#Feedback1http://www.shnenglu.com/limk/comments/commentRss/57529.htmlhttp://www.shnenglu.com/limk/services/trackbacks/57529.html琚獵#璋冪敤鐨凞LL涓鑸彧闇瑕佹妸瀵煎嚭鐨勫嚱鏁頒互閫傚綋鐨勫艦寮忓憟鐜板嵆鍙皟鐢紝姣斿
extern "C" __declspec(dllexport)
BOOL Integrate3 (){...}錛岃繖鏍風殑鍑芥暟錛屽湪C#閲岄潰澹版槑濡傦細

[DllImport("xxx.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public static extern bool Integrate3();錛岃繖閲岀殑璋冪敤鐩稿鏄畝鍗曠殑錛岃屾湁浜涙暟鎹被鍨嬪垯蹇呴』閫氳繃MarshalAs鏉ュ仛鎵樼綾誨瀷鐨勮漿鎹紝濡傦細

extern "C" __declspec(dllexport)
BOOL Integrate (LPCWSTR file1, LPCWSTR file2, LPCWSTR outputFile){...}

鐢變簬鏁版嵁綾誨瀷涓嶄竴鑷達紝鎵浠ュ湪澹版槑鏃惰娉ㄦ剰鎶婄被鍨嬭漿鎹㈣繃鏉ャ?/p>

[DllImport("xxx.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public static extern bool Integrate([In, MarshalAs(UnmanagedType.LPWStr)]string file1,
            [In, MarshalAs(UnmanagedType.LPWStr)]string file2, [In, MarshalAs(UnmanagedType.LPWStr)]string outputFile);

榪欐牱璋冪敤鍩烘湰鏄病鏈夐棶棰橈紝閲嶇偣鍦ㄤ簬鏁版嵁綾誨瀷鐨勮漿鎹€傚璇曡繃鍑犳浜嗗氨涓嶉棶棰樹簡銆?/p>

鍙﹀涓涓皬灝忕殑瀹炶返緇忛獙灝辨槸鍦–#涓皟璇旵錛嬶紜鐨凞LL錛岀煡閬撲簡灝辨槸涓鍙ヨ瘽錛屼笉鐭ラ亾灝辮鎼炲崐澶╋紝鍦–#欏圭洰灞炴т腑“鍚敤璋冭瘯欏?#8221;涓竴欏癸細“鍚敤闈炴墭綆′唬鐮佽皟璇?#8221;錛岄挬涓婅繖涓紝灝變竾浜嬪ぇ鍚変簡錛屽氨鍍忎綘璋冭瘯涓鑸殑紼嬪簭涓鏍楓?/p>

C#璋冪敤C++鐨凞LL鏃訛紝鍙傛暟浼犻掍究鎴愪簡涓涓棶棰樸備粖澶╂垜紕板埌鐨勪竴涓棶棰樻槸錛屽湪C++涓鍑虹殑鍑芥暟鐨勫弬鏁版槸string綾誨瀷鐨勶紝鍦–#涓氳繃string鐨勫弬鏁拌皟鐢ㄦ椂錛屼究浼氬嚭鐜拌鍐呭瓨宸叉崯鍧忔垨涓嶈兘璇誨彇鐨勫紓甯鎬俊鎭傚悗鏉ユ垜鎶奀++鐨勫鍑哄嚱鏁扮殑鍙傛暟鐢眘tring鏀逛負LPTSTR綾誨瀷錛屼篃鍗砪har*綾誨瀷錛岀劧鍚庡湪C#涓搴旂殑鍙傛暟鏀逛負StringBuilder綾誨瀷錛屾棦瑙e喅浜嗕紶榪涘幓鐨勫弬鏁伴棶棰橈紝鍙堣В鍐充簡浼犲嚭鍙傛暟鐨勯棶棰樸?/p>

DllImport鐭ヨ瘑鎷撳睍錛欴llImport 
 .net 妗嗘灦紼嬪簭鍙互閫氳繃闈欐?DLL 鍏ュ彛鐐圭殑鏂瑰紡鏉ヨ闂湰鏈轟唬鐮佸簱銆侱llImport 灞炴х敤浜庢寚瀹氬寘鍚閮ㄦ柟娉曠殑瀹炵幇鐨刣ll 浣嶇疆銆?/div>

DllImport 灞炴у畾涔夊涓嬶細
  
namespace System.Runtime.InteropServices
{
銆[AttributeUsage(AttributeTargets.Method)]
銆public class DllImportAttribute: System.Attribute
銆{
銆銆public DllImportAttribute(string dllName) {...}
銆銆public CallingConvention CallingConvention;
銆銆public CharSet CharSet;
銆銆public string EntryPoint;
銆銆public bool ExactSpelling;
銆銆public bool PreserveSig;
銆銆public bool SetLastError;
銆銆public string Value { get {...} }
銆}
}
  
銆銆璇存槑錛?
  
銆1銆丏llImport鍙兘鏀劇疆鍦ㄦ柟娉曞0鏄庝笂銆?nbsp;
    2銆丏llImport鍏鋒湁鍗曚釜瀹氫綅鍙傛暟錛氭寚瀹氬寘鍚瀵煎叆鏂規(guī)硶鐨?dll 鍚嶇О鐨?dllName 鍙傛暟銆?nbsp;
    3銆丏llImport鍏鋒湁浜斾釜鍛藉悕鍙傛暟錛?
銆銆   a銆丆allingConvention 鍙傛暟鎸囩ず鍏ュ彛鐐圭殑璋冪敤綰﹀畾銆傚鏋滄湭鎸囧畾 CallingConvention錛屽垯浣跨敤榛樿鍊?CallingConvention.Winapi銆?
   銆銆b銆丆harSet 鍙傛暟鎸囩ず鐢ㄥ湪鍏ュ彛鐐逛腑鐨勫瓧絎﹂泦銆傚鏋滄湭鎸囧畾 CharSet錛屽垯浣跨敤榛樿鍊?CharSet.Auto銆?
銆銆銆c銆丒ntryPoint 鍙傛暟緇欏嚭 dll 涓叆鍙g偣鐨勫悕縐般傚鏋滄湭鎸囧畾 EntryPoint錛屽垯浣跨敤鏂規(guī)硶鏈韓鐨勫悕縐般?
銆銆銆d銆丒xactSpelling 鍙傛暟鎸囩ず EntryPoint 鏄惁蹇呴』涓庢寚紺虹殑鍏ュ彛鐐圭殑鎷煎啓瀹屽叏鍖歸厤銆傚鏋滄湭鎸囧畾 ExactSpelling錛屽垯浣跨敤榛樿鍊?false銆?
銆銆銆e銆丳reserveSig 鍙傛暟鎸囩ず鏂規(guī)硶鐨勭鍚嶅簲褰撹淇濈暀榪樻槸琚漿鎹€傚綋絳懼悕琚漿鎹㈡椂錛屽畠琚漿鎹負涓涓叿鏈?HRESULT 榪斿洖鍊煎拰璇ヨ繑鍥炲肩殑涓涓悕涓?retval 鐨勯檮鍔犺緭鍑哄弬鏁扮殑絳懼悕銆傚鏋滄湭鎸囧畾    PreserveSig錛屽垯浣跨敤榛樿鍊?true銆?
   銆銆 f銆丼etLastError 鍙傛暟鎸囩ず鏂規(guī)硶鏄惁淇濈暀 Win32"涓婁竴閿欒"銆傚鏋滄湭鎸囧畾 SetLastError錛屽垯浣跨敤榛樿鍊?false銆?nbsp;
銆4銆佸畠鏄竴嬈℃у睘鎬х被銆?
銆5銆佹澶栵紝鐢?DllImport 灞炴т慨楗扮殑鏂規(guī)硶蹇呴』鍏鋒湁 extern 淇グ絎︺?

涓嬮潰鏄?C# 璋冪敤 Win32 MessageBox 鍑芥暟鐨勭ず渚嬶細
  
using System;
using System.Runtime.InteropServices;
class MainApp
{

     //閫氳繃DllImport寮曠敤user32.dll綾匯侻essageBox鏉ヨ嚜浜巙ser32.dll綾?
銆[DllImport("user32.dll", EntryPoint="MessageBox")]
銆public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType);
銆public static void Main()
銆{
銆銆MessageBox( 0, "鎮(zhèn)ㄥソ錛岃繖鏄?PInvoke錛?, ".net", 0 );
銆}
}
闈㈠悜瀵硅薄鐨勭紪紼嬭璦鍑犱箮閮界敤鍒頒簡鎶借薄綾昏繖涓姒傚康錛屾娊璞$被涓哄疄鐜版娊璞′簨鐗╂彁渚涗簡鏇村ぇ鐨勭伒媧繪с侰#涔熶笉渚嬪, C#閫氳繃瑕嗙洊铏氭帴鍙g殑鎶鏈繁鍖栦簡鎶借薄綾葷殑搴旂敤銆傛浜嗚В榪欐柟闈㈢殑鐭ヨ瘑錛岃鐪嬩笅涓鑺?瑕嗙洊铏氭帴鍙?/p>

榪欓噷璁茶堪鐨勬槸C#璋冪敤鏍囧噯鍔ㄦ佸簱鐨勯棶棰? 鍦ㄦ垜浠ュ墠鐨勬枃浠朵腑璁插埌榪? C#璋冪敤Win32API, 鍘熺悊鏄竴鏍風殑. 榪欓噷鎴戣緇嗚瑙g敤C鍐欎竴涓爣鍑嗙殑鍔ㄦ佸簱, 鐒跺悗璁〤#璋冪敤. (鏈瘒閫傚悎鍒濆鑰? 涓棿娌℃湁浠諱綍鍐椾綑浠g爜, 綆媧佹槑浜?
杞歡鐜: VC6.0(褰撶劧鍏朵粬鐗堟湰鐨刅C5涔熷彲浠?
1.鍒朵綔鏍囧噯鍔ㄦ佸簱


__declspec(dllexport) int __cdecl add(int, int);//榪欎竴鍙ユ槸澹版槑鍔ㄦ佸簱杈撳嚭涓涓彲渚涘涓嶈皟鐢ㄧ殑鍑芥暟鍘熷瀷.
int add(int a,int b) {//瀹炵幇榪欎釜鍑芥暟
return a+b;
}


浠ヤ笂綆鍗?琛屼唬鐮?澹版槑涓涓猘dd鐨勬柟娉? 杈撳叆鍙傛暟鏄袱涓猧nt鍙傛暟,榪斿洖榪欎袱涓暟涔嬪拰. 淇濆瓨涓篗yLib.c
鐒跺悗鎵ц緙栬瘧鍛戒護.
H:\XSchool\C#-School\HowTo>cl /LD MyLib.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

MyLib.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:MyLib.dll
/dll
/implib:MyLib.lib
MyLib.obj
   Creating library MyLib.lib and object MyLib.exp

紜俊鏈変互涓婅緭鍑? 璇存槑緙栬瘧鎴愬姛鐢熸垚浜嗗姩鎬佸簱.

2.緙栧啓C-Sharp紼嬪簭璋冪敤璇ュ姩鎬佸簱
using System;
using System.Runtime.InteropServices;//榪欐槸鐢ㄥ埌DllImport鏃跺欒寮曞叆鐨勫寘

public class InvokeDll {
[DllImport("MyLib.dll", CharSet=CharSet.Auto)]
static extern int add(int a,int b);//澹版槑澶栭儴鐨勬爣鍑嗗姩鎬佸簱, 璺焀in32API鏄竴鏍風殑.

public static void Main() {
Console.WriteLine(add(10,30));
}
}
淇濆瓨涓篒nvokeDll.cs鏂囦歡, 涓嶮yLib.dll緗簬鍚屼竴鐩綍, 緙栬瘧璇ユ枃浠?
H:\XSchool\C#-School\HowTo>csc invokedll.cs
灝嗙敓鎴怚nvokedll.exe, 鍙互鎵ц璇ユ枃浠?
浠ヤ笂鏄疌-Sharp璋冪敤鏍囧噯鍔ㄦ佸簱鐨勫叏榪囩▼, 鏈潵瑙夊緱寰堢畝鍗曠殑涓滆タ, 涓鐩撮兘娌℃湁鎯沖啓, 紕板閥浠婃棩閬囦竴鏈嬪弸闂強姝や簨, 灝遍『渚垮啓浜嗕笅鏉?



]]>va_list銆乿a_start銆乿a_arg銆乿a_end瀹忕殑浣跨敤(杞?http://www.shnenglu.com/limk/archive/2008/07/25/57116.html鏉庢槑鍧?/dc:creator>鏉庢槑鍧?/author>Fri, 25 Jul 2008 02:26:00 GMThttp://www.shnenglu.com/limk/archive/2008/07/25/57116.htmlhttp://www.shnenglu.com/limk/comments/57116.htmlhttp://www.shnenglu.com/limk/archive/2008/07/25/57116.html#Feedback0http://www.shnenglu.com/limk/comments/commentRss/57116.htmlhttp://www.shnenglu.com/limk/services/trackbacks/57116.html褰撲綘鐨勫嚱鏁扮殑鍙傛暟涓暟涓嶇‘瀹氭椂錛屽氨鍙互浣跨敤涓婅堪瀹忚繘琛屽姩鎬佸鐞嗭紝榪欐棤鐤戜負浣犵殑紼嬪簭澧炲姞浜嗙伒媧繪с?/span>

Example:

鈼?/span>鐢ㄦ硶1:
func( Type para1, Type para2, Type para3, ... )
{
    /****** Step 1 ******/
    va_list ap;
    va_start( ap, para3 ); //
涓瀹氳“...”涔嬪墠鐨勯偅涓弬鏁?/span>
   
    /****** Step 2 ******/
    //
姝ゆ椂ap鎸囧悜絎竴涓彲鍙樺弬鏁?/span>
    //
璋冪敤va_arg鍙栧緱閲岄潰鐨勫?/span>
    Type xx = va_arg( ap, Type );
   
    //Type
涓瀹氳鐩稿悓錛屽:
    //char *p = va_arg( ap, char *);
    //int i = va_arg( ap, int );

    //濡傛灉鏈夊涓弬鏁扮戶緇皟鐢?/span>va_arg

    /****** Step 3 ******/
    va_end(ap); //For robust!
}

鈼?/span>鐢ㄦ硶2:

CString AppendString(CString str1,...)//涓涓繛鎺ュ瓧絎︿覆鐨勫嚱鏁幫紝鍙傛暟涓暟鍙互鍔ㄦ佸彉鍖?br>{
      LPCTSTR str=str1;//str闇涓烘寚閽堢被鍨嬶紝鍥犱負va_arg瀹忚繑鍥炵殑鏄綘鐨勫弬鏁扮殑鎸囬拡錛屼絾鏄鏋滀綘鐨勫弬鏁頒負int絳夌畝                       //鍗曠被鍨嬶紝鍒欎笉蹇呬負鎸囬拡錛屽洜涓哄彉閲忓悕瀹為檯涓婂嵆鏄寚閽堛?br>      CString res;
      va_list marker;     //浣犵殑綾誨瀷閾捐〃
      va_start(marker,str1);//鍒濆鍖栦綘鐨刴arker閾捐〃

      while(str!="ListEnd")//ListEnd:鍙傛暟鐨勭粨鏉熸爣蹇楋紝鍗佸垎閲嶈錛屽湪瀹為檯涓渶鑷鎸囧畾
      {
          res+=str;
          str=va_arg(marker,CString);//鍙栧緱涓嬩竴涓寚閽?br>      }
      va_end(marker);//緇撴潫錛屼笌va_start鍚堢敤
      return res;
}

int main()
{
      CString    str=AppendString("xu","zhi","hong","ListEnd");
      cout<<str.GetBuffer(str.GetLength())<<endl;
      return 0;
}

杈撳嚭 xuzhihong
CString AppendString(CString str1,...)錛屽洜涓鴻繛鎺ュ瓧絎︿覆鐨勫弬鏁板彲浠ュ姩鎬佸彉鍖栵紝浣犱笉鐭ョ敤鎴瘋榪涜榪炴帴鐨勫瓧絎︿覆涓暟鏄灝戯紝鎵浠ヤ綘鍙互鐢?/span>鏉ヤ唬鏇褲備絾鏄娉ㄦ剰鐨勬槸浣犵殑鍑芥暟瑕佹湁涓涓弬鏁頒綔涓烘爣蹇楁潵琛ㄧず緇撴潫錛屽惁鍒欎細鍑洪敊銆傚湪涓婁緥涓敤ListEnd浣滀負緇撴潫絎︺傝繕鏈?/span>va_arg榪斿洖鐨勬槸浣犲弬鏁板唴瀹圭殑鎸囬拡銆備笂渚嬪湪鏀寔MFC紼嬪簭鐨?/span>console涓嬭繍琛岄氳繃銆?/span>

鍙彉鍙傛暟鍑芥暟鐨勫師鍨嬪0鏄庢牸寮忎負錛?br>
type VAFunction(type arg1, type arg2, … );

鍙傛暟鍙互鍒嗕負涓ら儴鍒嗭細涓暟紜畾鐨勫浐瀹氬弬鏁板拰涓暟鍙彉鐨勫彲閫夊弬鏁般傚嚱鏁拌嚦灝戦渶瑕佷竴涓浐瀹氬弬鏁幫紝鍥哄畾鍙傛暟鐨勫0鏄庡拰鏅氬嚱鏁頒竴鏍鳳紱鍙夊弬鏁扮敱浜庝釜鏁頒笉紜畾錛屽0鏄庢椂鐢?…"琛ㄧず銆傚浐瀹氬弬鏁板拰鍙夊弬鏁板叕鍚屾瀯鎴愪竴涓嚱鏁扮殑鍙傛暟鍒楄〃銆?br>
鍊熷姪涓婇潰榪欎釜綆鍗曠殑渚?錛屾潵鐪嬬湅鍚勪釜va_xxx鐨勪綔鐢ㄣ?br>
va_list arg_ptr錛氬畾涔変竴涓寚鍚戜釜鏁板彲鍙樼殑鍙傛暟鍒楄〃鎸囬拡錛?br>
va_start(arg_ptr, argN)錛氫嬌鍙傛暟鍒楄〃鎸囬拡arg_ptr鎸囧悜鍑芥暟鍙傛暟鍒楄〃涓殑絎竴涓彲閫夊弬鏁幫紝璇存槑錛歛rgN鏄綅浜庣涓涓彲閫夊弬鏁頒箣鍓嶇殑鍥哄畾鍙傛暟錛岋紙鎴栬呰錛屾渶鍚庝竴涓?鍥哄畾鍙傛暟錛?#8230;涔嬪墠鐨勪竴涓弬鏁幫級錛屽嚱鏁板弬鏁板垪琛ㄤ腑鍙傛暟鍦ㄥ唴瀛樹腑鐨勯『搴忎笌鍑芥暟澹版槑鏃剁殑欏哄簭鏄竴鑷寸殑銆傚鏋滄湁涓va鍑芥暟鐨勫0鏄庢槸void va_test(char a, char b, char c, …)錛屽垯瀹冪殑鍥哄畾鍙傛暟渚濇鏄痑,b,c錛屾渶鍚庝竴涓浐瀹氬弬鏁癮rgN涓篶錛屽洜姝ゅ氨鏄痸a_start(arg_ptr, c)銆?br>
va_arg(arg_ptr, type)錛氳繑鍥炲弬鏁板垪琛ㄤ腑鎸囬拡arg_ptr鎵鎸囩殑鍙傛暟錛岃繑鍥炵被鍨嬩負type錛屽茍浣挎寚閽坅rg_ptr鎸囧悜鍙傛暟鍒楄〃涓笅涓涓弬鏁般?br>
va_copy(dest, src)錛歞est錛宻rc鐨勭被鍨嬮兘鏄痸a_list錛寁a_copy()鐢ㄤ簬澶嶅埗鍙傛暟鍒楄〃鎸囬拡錛屽皢dest鍒濆鍖栦負src銆?br>
va_end(arg_ptr)錛氭竻絀哄弬鏁板垪琛紝騫剁疆鍙傛暟鎸囬拡arg_ptr鏃犳晥銆傝鏄庯細鎸囬拡arg_ptr琚疆鏃犳晥鍚庯紝鍙互閫氳繃璋冪敤va_start ()銆乿a_copy()鎭㈠arg_ptr銆傛瘡嬈¤皟鐢╲a_start() / va_copy()鍚庯紝蹇呴』寰楁湁鐩稿簲鐨剉a_end()涓庝箣鍖歸厤銆傚弬鏁版寚閽堝彲浠ュ湪鍙傛暟鍒楄〃涓殢鎰忓湴鏉ュ洖縐誨姩錛屼絾蹇呴』鍦╲a_start() … va_end()涔嬪唴銆?br>
va鍑芥暟鐨勫疄鐜板氨鏄鍙傛暟鎸囬拡鐨勪嬌鐢ㄥ拰鎺у埗銆?br>

typedef char *   va_list;   // x86騫沖彴涓媣a_list鐨勫畾涔?br>


鍑芥暟鐨勫浐瀹氬弬鏁伴儴鍒嗭紝鍙互鐩存帴浠庡嚱鏁板畾涔夋椂鐨勫弬鏁板悕鑾峰緱錛涘浜庡彲閫夊弬鏁伴儴鍒嗭紝鍏堝皢鎸囬拡鎸囧悜絎竴涓彲閫夊弬鏁幫紝鐒跺悗渚濇鍚庣Щ鎸囬拡錛屾牴鎹笌緇撴潫鏍囧織鐨勬瘮杈冩潵鍒ゆ柇鏄惁宸茬粡鑾峰緱鍏ㄩ儴鍙傛暟銆傚洜姝わ紝va鍑芥暟涓粨鏉熸爣蹇楀繀欏諱簨鍏堢害瀹氬ソ錛屽惁鍒欙紝鎸囬拡浼氭寚鍚戞棤鏁堢殑鍐呭瓨鍦板潃錛屽鑷村嚭閿欍?br>
榪欓噷錛岀Щ鍔ㄦ寚閽堜嬌鍏舵寚鍚戜笅涓涓弬鏁幫紝閭d箞縐誨姩鎸囬拡鏃剁殑鍋忕Щ閲忔槸澶氬皯鍛紝娌℃湁鍏蜂綋絳旀錛屽洜涓鴻繖閲屾秹鍙婂埌鍐呭瓨瀵歸綈錛坅lignment錛夐棶棰橈紝鍐呭瓨瀵歸綈璺熷叿浣?浣跨敤鐨勭‖浠跺鉤鍙版湁瀵嗗垏鍏崇郴錛屾瘮濡傚ぇ瀹剁啛鐭ョ殑32浣峹86騫沖彴瑙勫畾鎵鏈夌殑鍙橀噺鍦板潃蹇呴』鏄?鐨勫嶆暟(sizeof(int) = 4)銆倂a鏈哄埗涓敤瀹廮INTSIZEOF(n)鏉ヨВ鍐寵繖涓棶棰橈紝娌℃湁榪欎簺瀹忥紝va鐨勫彲縐繪鎬ф棤浠庤皥璧楓?br>
棣栧厛浠嬬粛瀹廮INTSIZEOF(n)錛屽畠姹傚嚭鍙橀噺鍗犵敤鍐呭瓨絀洪棿鐨勫ぇ灝忥紝鏄痸a鐨勫疄鐜扮殑鍩虹銆?br>

#define _INTSIZEOF(n)   ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )



#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )           //絎竴涓彲閫夊弬鏁板湴鍧
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //涓嬩竴涓弬鏁板湴鍧
#define va_end(ap)    ( ap = (va_list)0 )                            // 灝嗘寚閽堢疆涓烘棤鏁?br>


涓嬭〃鏄拡瀵瑰嚱鏁癷nt TestFunc(int n1, int n2, int n3, …)

鍙傛暟浼犻掓椂鐨勫唴瀛樺爢鏍堟儏鍐點傦紙C緙栬瘧鍣ㄩ粯璁ょ殑鍙傛暟浼犻掓柟寮忔槸__cdecl銆傦級

瀵硅鍑芥暟鐨勮皟鐢ㄤ負int result = TestFunc(a, b, c, d. e); 鍏朵腑e涓虹粨鏉熸爣蹇椼?br>


浠庝笂鍥句腑鍙互寰堟竻妤氬湴鐪嬪嚭va_xxx瀹忓姝ょ紪鍐欑殑鍘熷洜銆?br>
1錛?va_start銆備負浜嗗緱鍒扮涓涓彲閫夊弬鏁扮殑鍦板潃錛屾垜浠湁涓夌鍔炴硶鍙互鍋氬埌錛?br>
A) = &n3 + _INTSIZEOF(n3)

// 鏈鍚庝竴涓浐瀹氬弬鏁扮殑鍦板潃 + 璇ュ弬鏁板崰鐢ㄥ唴瀛樼殑澶у皬

B) = &n2 + _INTSIZEOF(n3) + _INTSIZEOF(n2)

// 涓棿鏌愪釜鍥哄畾鍙傛暟鐨勫湴鍧 + 璇ュ弬鏁頒箣鍚庢墍鏈夊浐瀹氬弬鏁板崰鐢ㄧ殑鍐呭瓨澶у皬涔嬪拰

C) = &n1 + _INTSIZEOF(n3) + _INTSIZEOF(n2) + _INTSIZEOF(n1)

// 絎竴涓浐瀹氬弬鏁扮殑鍦板潃 + 鎵鏈夊浐瀹氬弬鏁板崰鐢ㄧ殑鍐呭瓨澶у皬涔嬪拰

浠庣紪璇戝櫒瀹炵幇瑙掑害鏉ョ湅錛屾柟娉旴)錛屾柟娉旵)涓轟簡姹傚嚭鍦板潃錛岀紪璇戝櫒榪橀渶鐭ラ亾鏈夊灝戜釜鍥哄畾鍙傛暟錛屼互鍙婂畠浠殑澶у皬錛屾病鏈夋妸闂鍒嗚В鍒版渶綆鍗曪紝鎵浠ヤ笉鏄緢鑱槑鐨勯?寰勶紝涓嶄簣閲囩撼錛涚浉瀵規(guī)潵璇達紝鏂規(guī)硶A)涓繍綆楃殑涓や釜鍊煎垯瀹屽叏鍙互紜畾銆倂a_start()姝f槸閲囩敤A)鏂規(guī)硶錛屾帴鍙楁渶鍚庝竴涓浐瀹氬弬鏁般傝皟鐢╲a_start ()鐨勭粨鏋滄繪槸浣挎寚閽堟寚鍚戜笅涓涓弬鏁扮殑鍦板潃錛屽茍鎶婂畠浣滀負絎竴涓彲閫夊弬鏁般傚湪鍚涓浐瀹氬弬鏁扮殑鍑芥暟涓紝璋冪敤va_start()鏃訛紝濡傛灉涓嶆槸鐢ㄦ渶鍚庝竴涓浐瀹?鍙傛暟錛屽浜庣紪璇戝櫒鏉ヨ錛屽彲閫夊弬鏁扮殑涓暟宸茬粡澧炲姞錛屽皢緇欑▼搴忓甫鏉ヤ竴浜涙剰鎯充笉鍒扮殑閿欒銆?褰撶劧濡傛灉浣犺涓鴻嚜宸卞鎸囬拡宸茬粡鐭ユ牴鐭ュ簳錛屾父鍒冩湁浣欙紝閭d箞錛屾庝箞鐢ㄥ氨闅?浣狅紝浣犵敋鑷沖彲浠ョ敤瀹冨畬鎴愪竴浜涘緢浼樼錛堥珮鏁堬級鐨勪唬鐮侊紝浣嗘槸錛岃繖鏍蜂細澶уぇ闄嶄綆浠g爜鐨勫彲璇繪с?

娉ㄦ剰錛氬畯va_start鏄鍙傛暟鐨勫湴鍧榪涜鎿嶄綔鐨勶紝瑕佹眰鍙傛暟鍦板潃蹇呴』鏄湁鏁堢殑銆備竴浜涘湴鍧鏃犳晥鐨勭被鍨嬩笉鑳藉綋浣滃浐瀹氬弬鏁扮被鍨嬨傛瘮濡傦細瀵勫瓨鍣ㄧ被鍨嬶紝瀹冪殑鍦板潃涓嶆槸鏈夋晥鐨勫唴瀛樺湴鍧鍊鹼紱鏁扮粍鍜屽嚱鏁頒篃涓嶅厑璁革紝浠栦滑鐨勯暱搴︽槸涓棶棰樸傚洜姝わ紝榪欎簺綾誨瀷鏃朵笉鑳戒綔涓簐a鍑芥暟鐨勫弬鏁扮殑銆?br>
2錛?va_arg韜吋浜岃亴錛氳繑鍥炲綋鍓嶅弬鏁幫紝騫朵嬌鍙傛暟鎸囬拡鎸囧悜涓嬩竴涓弬鏁般?br>
鍒濈湅va_arg瀹忓畾涔夊緢鍒壄錛屽鏋滄妸瀹冩媶鎴愪袱涓鍙ワ紝鍙互寰堟竻妤氬湴鐪嬪嚭瀹冨畬鎴愮殑涓や釜鑱岃矗銆?br>

#define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //涓嬩竴涓弬鏁板湴鍧
// 灝? *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )鎷嗘垚錛?br>/* 鎸囬拡ap鎸囧悜涓嬩竴涓弬鏁扮殑鍦板潃 */
1錛?ap += _INTSIZEOF(t)錛?nbsp;        // 褰撳墠錛宎p宸茬粡鎸囧悜涓嬩竴涓弬鏁頒簡
/* ap鍑忓幓褰撳墠鍙傛暟鐨勫ぇ灝忓緱鍒板綋鍓嶅弬鏁扮殑鍦板潃錛屽啀寮哄埗綾誨瀷杞崲鍚庤繑鍥炲畠鐨勫?*/
2錛?return *(t *)( ap - _INTSIZEOF(t))


鍥炴兂鍒皃rintf/scanf緋誨垪鍑芥暟鐨?d %s涔嬬被鐨勬牸寮忓寲鎸囦護錛屾垜浠笉闅劇悊瑙h繖浜涘畠浠殑鐢ㄩ斾簡- 鏄庣ず鍙傛暟寮哄埗杞崲鐨勭被鍨嬨?br>
(娉細printf/scanf娌℃湁浣跨敤va_xxx鏉ュ疄鐜幫紝浣嗗師鐞嗘槸涓鑷寸殑銆?

3錛巚a_end寰堢畝鍗曪紝浠呬粎鏄妸鎸囬拡浣滃簾鑰屽凡銆?br>
#define va_end(ap) (ap = (va_list)0) // x86騫沖彴

鍥涖?綆媧併佺伒媧伙紝涔熸湁鍗遍櫓

浠巚a鐨勫疄鐜板彲浠ョ湅鍑猴紝鎸囬拡鐨勫悎鐞嗚繍鐢紝鎶奀璇█綆媧併佺伒媧葷殑鐗規(guī)ц〃鐜板緱娣嬫紦灝借嚧錛屽彨浜轟笉寰椾笉浣╂湇C鐨勫己澶у拰楂樻晥銆備笉鍙惁璁ょ殑鏄紝緇欑紪紼嬩漢鍛樺お澶氳嚜鐢辯┖闂村繀鐒朵嬌紼嬪簭鐨勫畨鍏ㄦч檷浣庛倂a涓紝涓轟簡寰楀埌鎵鏈変紶閫掔粰鍑芥暟鐨勫弬鏁幫紝闇瑕佺敤va_arg渚濇閬嶅巻銆傚叾涓瓨鍦ㄤ袱涓殣鎮(zhèn)o細

1錛夊浣曠‘瀹氬弬鏁扮殑綾誨瀷銆?br>
va_arg鍦ㄧ被鍨嬫鏌ユ柟闈笌鍏惰闈炲父鐏墊椿錛屼笉濡傝鏄緢涓嶈礋璐o紝鍥犱負鏄己鍒剁被鍨嬭漿鎹紝va_arg閮芥妸褰撳墠鎸囬拡鎵鎸囧悜鐨勫唴瀹瑰己鍒惰漿鎹㈠埌鎸囧畾綾誨瀷錛?br>
2錛夌粨鏉熸爣蹇椼傚鏋滄病鏈夌粨鏉熸爣蹇楃殑鍒ゆ柇錛寁a灝嗘寜榛樿綾誨瀷渚濇榪斿洖鍐呭瓨涓殑鍐呭錛岀洿鍒拌闂埌闈炴硶鍐呭瓨鑰屽嚭閿欓鍑恒備緥2涓璖qSum()姹傜殑鏄嚜鐒舵暟鐨勫鉤鏂?鍜岋紝鎵浠ユ垜鎶婅礋鏁板拰0浣滀負瀹冪殑緇撴潫鏍囧織銆備緥濡俿canf鎶婃帴鏀跺埌鐨勫洖杞︾浣滀負緇撴潫鏍囧織錛屽ぇ瀹剁啛鐭ョ殑printf()瀵瑰瓧絎︿覆鐨勫鐞嗙敤'\0'浣滀負緇撴潫鏍?蹇楋紝鏃犳硶鎯寵薄C涓殑瀛楃涓插鏋滄病鏈?\0'錛?浠g爜灝嗕細鏄庢牱涓鐣儏鏅紝浼拌閭f椂鏈嫻佽鐨勫彲鑳芥槸瀛楃鏁扮粍錛屾垨鑰呮槸malloc/free銆?br>
鍏佽瀵瑰唴瀛樼殑闅忔剰璁塊棶錛屼細鐣欑粰涓嶆濂芥剰鑰呯暀涓嬫敾鍑葷殑鍙兘銆傚綋澶勭悊cracker綺懼績璁捐濂界殑涓涓插瓧絎︿覆鍚庯紝紼嬪簭灝嗚煩杞埌涓浜涙伓鎰忎唬鐮佸尯鍩熸墽琛岋紝浠ヤ嬌cracker杈懼埌鍏舵敾鍑葷洰鐨勩?甯歌鐨別xploit鏀誨嚮)鎵浠ワ紝蹇呴渶紱佹瀵瑰唴瀛樼殑闅忔剰璁塊棶鍜屼弗鏍兼帶鍒跺唴瀛樿闂竟鐣屻?br>



]]>
yellow中文字幕久久网| WWW婷婷AV久久久影片| 久久久精品日本一区二区三区| 久久精品成人国产午夜| 久久久久免费视频| 久久久久女人精品毛片| 国内精品久久久久国产盗摄| 精品久久久久久久国产潘金莲| 三上悠亚久久精品| 久久久久成人精品无码 | 久久精品a亚洲国产v高清不卡| 亚洲国产成人久久综合碰碰动漫3d| 韩国三级中文字幕hd久久精品 | 久久久噜噜噜久久中文字幕色伊伊 | 久久人人爽人人爽人人AV| 一本一道久久精品综合| 亚洲日本va中文字幕久久| 久久成人18免费网站| 亚洲成色www久久网站夜月| 久久九九免费高清视频| 九九99精品久久久久久| 看久久久久久a级毛片| 久久九九久精品国产免费直播| 99久久精品午夜一区二区| 精品国产乱码久久久久久呢 | 久久国产成人午夜AV影院| 日产精品久久久久久久| 亚洲精品无码久久久久AV麻豆| 久久九九亚洲精品| 久久精品99久久香蕉国产色戒 | 99久久国产亚洲综合精品| 99久久精品国产一区二区三区| 潮喷大喷水系列无码久久精品| 人妻无码αv中文字幕久久 | 72种姿势欧美久久久久大黄蕉| 久久久久久久久久久久久久| 无码任你躁久久久久久老妇| 亚洲国产成人乱码精品女人久久久不卡| 97超级碰碰碰碰久久久久| 99久久精品免费看国产| 亚洲欧美精品伊人久久|