首頁 文件>

材料歸檔

注:“您已超過最大打開的游標ORA-01000號”[JAVA]

一天碰到錯誤OracleDB注意到:“你已經超過了打開游標的最大數ORA-01000”。

成為一個類似下面的代碼的問題
(未經證實的操作。揭露代碼的翻譯工作的事情,不會去,作為樣本改寫)

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class cursorLeakeSample { public cursorLeakeSample(List idList) { try { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // コネクション取得 Connection connection = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger"); String sql = "SELECT NAME FROM ITEM WHERE ID = ?"; PreparedStatement statement = null; try { for (String id : idList) { Object[] params = new Object[] { id }; // SQLにパラメータ埋め込みと実行statement = connection.prepareStatement(sql); statement.setObject(1, params[0]); statement.executeUpdate(); connection.commit(); } } catch (SQLException e) { // SQL実行失敗 connection.rollback(); e.printStackTrace(); } finally { statement.close(); connection.close(); } } catch (SQLException e) { // コネクションの接続・切断・ロールバック、ステートメントの解放に失敗 e.printStackTrace(); } catch (ClassNotFoundException e) { // Oracle JDBC ドライバが見つからなかった e.printStackTrace(); } } }  import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class cursorLeakeSample { public cursorLeakeSample(List idList) { try { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // コネクション取得 Connection connection = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger"); String sql = "SELECT NAME FROM ITEM WHERE ID = ?"; PreparedStatement statement = null; try { for (String id : idList) { Object[] params = new Object[] { id }; // SQLにパラメータ埋め込みと実行statement = connection.prepareStatement(sql); statement.setObject(1, params[0]); statement.executeUpdate(); connection.commit(); } } catch (SQLException e) { // SQL実行失敗 connection.rollback(); e.printStackTrace(); } finally { statement.close(); connection.close(); } } catch (SQLException e) { // コネクションの接続・切断・ロールバック、ステートメントの解放に失敗 e.printStackTrace(); } catch (ClassNotFoundException e) { // Oracle JDBC ドライバが見つからなかった e.printStackTrace(); } } } 

是其中的重點,已引起部分。
你知道為什麼不呢?
首先,轉而把一個空框使用一個值來創建一個變量的聲明,在一個循環中獲得的,在年底發布。
乍一看,它看起來這樣造成洩漏是一種解脫,你可以發現問題,並按照一點點的過程。

編寫的SQL隱式“的prepareStatement”將創建一個游標。
有問題的代碼,光標已經產生循環,知道這是一種隱含的很多。
它已被釋放“的prepareStatement”循環退出時,存儲。

例如,19是,它並沒有被釋放的過程是20。

所以,我應該怎麼寫,如果

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class cursorLeakeSample { public cursorLeakeSample(List idList) { try { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // コネクション取得 Connection connection = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger"); String sql = "SELECT NAME FROM ITEM WHERE ID = ?"; PreparedStatement statement = connection.prepareStatement(sql); try { for (String id : idList) { Object[] params = new Object[] { id }; // SQLにパラメータ埋め込みと実行 statement.setObject(1, params[0]); statement.executeUpdate(); connection.commit(); } } catch (SQLException e) { // SQL実行失敗 connection.rollback(); e.printStackTrace(); } finally { statement.close(); connection.close(); } } catch (SQLException e) { // コネクションの接続・切断・ロールバック、ステートメントの解放に失敗 e.printStackTrace(); } catch (ClassNotFoundException e) { // Oracle JDBC ドライバが見つからなかった e.printStackTrace(); } } }  import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class cursorLeakeSample { public cursorLeakeSample(List idList) { try { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // コネクション取得 Connection connection = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger"); String sql = "SELECT NAME FROM ITEM WHERE ID = ?"; PreparedStatement statement = connection.prepareStatement(sql); try { for (String id : idList) { Object[] params = new Object[] { id }; // SQLにパラメータ埋め込みと実行 statement.setObject(1, params[0]); statement.executeUpdate(); connection.commit(); } } catch (SQLException e) { // SQL実行失敗 connection.rollback(); e.printStackTrace(); } finally { statement.close(); connection.close(); } } catch (SQLException e) { // コネクションの接続・切断・ロールバック、ステートメントの解放に失敗 e.printStackTrace(); } catch (ClassNotFoundException e) { // Oracle JDBC ドライバが見つからなかった e.printStackTrace(); } } } 

也許這種方式。 如果您使用“預處理”。
我認為,關閉()在聲明中,所以如果你想使用它的“聲明”多田野。

動態添加的Java類路徑

注:現在,我們已經實現了自己的路,我期待和你要創建的Tomcat的WEB-INF/classes罐和其他系統的軟化程序。
單瓶 “或” 發罐如果你認為可以回應“,並有更好的利用。
順便說一下,操作檢查證實,它的作品甚至在罐總結時JRE5。

 package jp.moonwing.net; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; /** * クラスパスの動的追加 * * @author $Author: U.Yobane $ * @version $Version: v 043b2b764886 2011/06/13 01:23:25+0900(JST) $ */ public final class ApplicationClassLoader { /** クラス情報格納フィールド */ private static final Class<?>[] PARAMETERS = new Class<?>[] { URL.class }; /** * コンストラクタ */ private ApplicationClassLoader() { } /** * メイン * * @param args 起動引数文字列配列 */ public static void main(String[] args) { try { // クラスパスの追加 addClassPath( {追加したいクラスパスディレクトリ} ); addClassPath( {追加したいJAR} ); // メインプログラムを実行 Application.execute(args); } catch (IOException e) { e.printStackTrace(); } } /** * クラスローダーにクラスパスを動的追加 * * @param classPath 追加するクラスパス * @throws IOException クラスパスの動的追加に失敗 */ public static void addClassPath(String classPath) throws IOException { addClassPath(new File(classPath)); } /** * クラスパスを再帰的にたどり、追加可能パスはすべて追加 * * @param classPath 追加するファイル * @throws IOException クラスパスの動的追加に失敗 */ private static void addClassPath(File classPath) throws IOException { if (classPath.isDirectory()) { // ディレクトリを追加 addClassPath(classPath.toURL()); // ディレクトリ配下を探索 File[] child = classPath.listFiles(); for (int i = 0; i < child.length; i++) { addClassPath(child[i]); } } else { String suffix = getSuffix(classPath.getName()); // 見つかったファイルがJARもしくはZipの場合は追加 if (suffix.equalsIgnoreCase("zip") || suffix.equalsIgnoreCase("jar")) { addClassPath(classPath.toURL()); } } } /** * システムクラスローダーにクラスパスを強制的に追加 * * @param classPathUrl クラスパス * @throws IOException クラスパスの動的追加に失敗 */ private static void addClassPath(URL classPathUrl) throws IOException { URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class<?> sysclass = URLClassLoader.class; try { Method method = sysclass.getDeclaredMethod("addURL", PARAMETERS); method.setAccessible(true); method.invoke(sysloader, new Object[] { classPathUrl }); } catch (NoSuchMethodException e) { throw new IOException("could not add " + classPathUrl + " to classpath"); } catch (InvocationTargetException e) { throw new IOException("could not add " + classPathUrl + " to classpath"); } catch (IllegalAccessException e) { throw new IOException("could not add " + classPathUrl + " to classpath"); } } /** * ファイル名から拡張子を返却 * * @param fileName ファイル名 * @return ファイルの拡張子 */ private static String getSuffix(String fileName) { if (fileName == null) { return null; } int point = fileName.lastIndexOf("."); if (point != -1) { return fileName.substring(point + 1); } return fileName; } } 

UAC支持彙編[C#]應用

注意:如果你想改變應用端在一般及行政權利和特權的行為

  1. 從信息來看,是否開始以來WindowsVista的操作系統版本已是<br />或應用程序運行在一個(OS與UAC)和購買WindowsVista的

     using System; private bool IsUAC() { OperatingSystem osInfo = Environment.OSVersion; if (osInfo.Platform == PlatformID.Win32NT) { if (osInfo.Version.Major == 6) { if (osInfo.Version.Minor == 0) { // Windows Vista, Windows Server 2008 return true; } else if (osInfo.Version.Minor == 1) { // Windows 7, Windows Server 2008 R2 return true; } } else if (osInfo.Version.Major > 6) { // new Windows return true; } } return false; } 
  2. 當他們......“以管理員身份運行”是<br />或應用程序已經開始具有管理員權限的應用

     using System.Security.Principal; private bool IsAdministrator() { bool isAllowed = false; try { WindowsIdentity wi = WindowsIdentity.GetCurrent(); WindowsPrincipal wp = new WindowsPrincipal(wi); isAllowed = wp.IsInRole(WindowsBuiltInRole.Administrator); } catch { isAllowed = false; } return isAllowed; } 
  3. 用戶啟動應用程序<br />如果你想知道應用程序是否可以晉升為管理員用戶開始甚至如果它已開始屬於Administrators組或一般的特權

     using System.DirectoryServices.AccountManagement; private bool IsAdministrators() { bool isAllowed = false; try { PrincipalContext pc = new PrincipalContext(ContextType.Machine, null); UserPrincipal up = UserPrincipal.Current; GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, "Administrators"); if (up.IsMemberOf(gp)) { isAllowed = true; } } catch { isAllowed = false; } return isAllowed; } 

    不喜歡工作,以及在某些環境中,上面的代碼嗎? 可確保下面的代碼。

     using System.DirectoryServices.AccountManagement; private bool IsAdministrators() { bool isAllowed = false; try { PrincipalContext pc = new PrincipalContext(ContextType.Machine, null); UserPrincipal up = UserPrincipal.Current; foreach (GroupPrincipal gp in up.GetGroups()) { try { if (gp.Name.ToLower().Equals("Administrators".ToLower())) { isAllowed = true; } } finally { gp.Dispose(); } } } catch { isAllowed = false; } return isAllowed; } 
  4. 具有管理員權限的重新啟動,如果行政機關需要處理<br />重新啟動具有管理員權限的應用

     using System; using System.Diagnostics; private void RestartApplication() { ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = true; psi.WorkingDirectory = Environment.CurrentDirectory; psi.FileName = Application.ExecutablePath; psi.Verb = "runas"; try { Process p = Process.Start(psi); } catch { return; } Application.Exit(); } 
  5. 要在按鈕上顯示的圖標來通知用戶,將需要管理權限才能繼續操作,必須具有管理員權限的按鈕,以顯示一個圖標<br />(垂直)的UAC(垂直)的UAC (盾牌圖標和WIN32API盾牌圖標SystemIcons.Shield財產是有區別的,它已被作為標準的Windows 7。這是多個Win32 API)

     using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Sample { public partial class Form1 : Form { [DllImport("user32.dll")] private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam); // 第2パラメータ:盾アイコンを設定するフラグ uint BCM_SETSHIELD = 0x0000160C; public Form1() { InitializeComponent(); // ボタンの外観を「System」にする必要がある button1.FlatStyle = FlatStyle.System; } private void checkBox1_CheckedChanged(object sender, EventArgs e) { // 第1パラメータ:ボタンのウィンドウ・ハンドル HandleRef hwnd = new HandleRef(button1, button1.Handle); if (checkBox1.Checked) { SendMessage(hwnd, BCM_SETSHIELD, new IntPtr(0), new IntPtr(1)); } else { SendMessage(hwnd, BCM_SETSHIELD, new IntPtr(0), new IntPtr(0)); } } } } 

PSP的背光更換保險絲

PSPのバックライトヒューズの位置
PSP-1000屏幕不再突然出現。
我聽到的聲音,聽到的聲音也是一個按鈕。

凝視一直硬,薄ー圖形顯示。

來真正的先驅,並檢查在網絡上的信息,然後猜測背光已過期這種情況。

立即,分解,然後嘗試的導火索,這是我發布背光保險絲的位置仔細檢查的連續性。

用數字萬用表,但沒有任何反應,保險絲本身並不知道什麼是正確的1005尺寸的片式保險絲的方形。
例如,它不會被測量或有表面上的薄膜。

我決定更換規範。
更換保險絲0.5A為F4501。
首先,我想放棄不融化的焊料,但被認為是作為一個政策取代。
因此,我們決定把並行。
(如果現有的導火線是活著的,因為目前被分割),如果這樣,嚴格地說,但它也並不好,
它被認為是恢復,如果在這項工作中的背光,保險絲是不為過相同,
另外,如果有是消除好,所以沒有很好的事業。

,恢復工作進行了安全背光。
PSP再次發揮。

權力KuroBox維修

玄箱の電源回路のヒューズ リード付きヒューズ
電源插頭仍然KuroBox妹妹,不小心碰到了電源,請注意,因為維修工作不得不關掉保險絲

根是無商標的方塊的第一件事。
但實際上它去拉另一個電源插頭的電源插頭拔出,功率KuroBox是不會錯過。
藍色火花已經死了,會觸及阻力,由於失踪的工作電源保險絲的腳。

電源沒有進入預計也適用於電源的手去睡覺是在一個沒有眼睛的匆忙,以確保你沒有失敗。
是的,如果電源是去KuroBox尾巴。 如果發生這種情況為時已晚。

有恢復和更換保險絲,絕不能有讓人看起來就像是淨短信息凹痕。

但現在,即使自己的保險絲熔斷? 用數字萬用表來驗證(F1)保險絲的連續性和思考。
結果尚未進行。 這意味著,已過期的導火索。
這可能是幸運的。
保險絲的電路意味著切斷,為了不損壞電路,當它變得過度的電流或電壓過高,溫度異常保護電路,是有什麼其他部分沒有損壞的可能性,因為可能是幸運的。
和你可以看到相反的導火索的連續性,將其他損壞的部分,它是很難找出原因。

以及,廣播中心大沼是尋找在秋葉原3A鉛網的信息為基礎的保險絲。
是150日元兩種。 被發現的問題與回程,而我認為秋葉原的確,做的工作,並立即交換

因為它是書面2A保險絲,如果你看看在原來的緊密合作。
但是,從3A移動融合本身,而是變得正常3A的唯一連接的電路,即使它是2A過流保護。
這是誕生過電流時,熔斷器,交流新的人的其他部分的潛在損害,因為喜歡買2A。

應當指出的是能改造,沒有您所購買的保險絲的鉛含量問題,但有點厚。
,並確保您可以成功地開始當您打開電源。

如果你找到一個試圖取代含鉛2A保險絲···

[VS]軟件發行商的證書創建和簽署

注意:如何創建和簽署證書創建的東西的方法簽名。

如果你想使用ClickOnce安裝了VSTO或自簽名的證書,該證書應Oreore和他所做的,你需要什麼。
您使用的工具在WindowsSDK

  • 如何創建
     rem 1.==== rem CA:Certificate Authority:認証局証明書rem 会社名 : MoonWing rem 組織名 : MoonWing Authority Root CA rem 県 名 : Tokyo rem 国 名 : JP rem 有効期限: 2012.12.31 "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -r -n "C=JP, S=Tokyo, OU=MoonWing Authority Root CA, O=MoonWing" -e 12/31/2012 -a sha1 -cy authority -sv moonwingCA.pvk moonwingCA.cer rem 秘密キーのパスワードの作成:Subject Key: rootCA rem 秘密キーのパスワードの入力:Subject Key: rootCA rem 2.==== rem EE:End Entity:署名用証明書rem コモン名: MoonWing rem 会社名 : MoonWing rem 組織名 : MoonWing Development rem 県 名 : Tokyo rem 国 名 : JP rem 有効期限: 2012.12.31 "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -n "CN=MoonWing, C=JP, S=Tokyo, O=MoonWing, OU=MoonWing Development" -e 12/31/2012 -sv moonwing.pvk -ic moonwingCA.cer -iv moonwingCA.pvk -nscp -cy end moonwing.cer rem 秘密キーのパスワードの作成:Subject Key: endEntity rem 秘密キーのパスワードの入力:Subject Key: endEntity rem 秘密キーのパスワードの入力:Issuer Signature: rootCA rem 3.==== rem SPC:Software Publisher's Certificate:ソフトウェア発行元証明書"%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\Cert2SPC" moonwing.cer moonwingCA.cer moonwing.spc rem 4.==== rem PFX:Personal Information Exchange:PKCS#12 rem -pi(pvkpassword):endEntity rem -po(pfxpassword):SPC "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\pvk2pfx" -pvk moonwing.pvk -pi endEntity -spc moonwing.spc -pfx moonwing.pfx -po SPC 
  • 簽名的方法
     rem 5.==== rem target.exeへ署名rem -t(time stamp server):http://timestamp.verisign.com/scripts/timstamp.dll rem -p(pfxpassword):SPC "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\signtool" sign /f moonwing.pfx /a /t http://timestamp.verisign.com/scripts/timstamp.dll /p SPC target.exe 

[VS] PIA的總結兼容版本

表的版本。NetFramework版本的PIA版本的Office和VSTO的表在通過創建。
PIA是... 更多 PrimaryInteropAssembly 微軟請問。

PIA的 辦事處的支持 。NetFramework支持 Windows支持
XP中 XP中 1.1 XP中
2003 2003 1.1 2000 SP3的XP,Server 2003中
2007 2007 1.1 2000 SP4,Windows XP SP2,Server 2003中
2010 2010 2.0或更高 2000 SP4,XP SP2中,Server 2003中,Vista中,7,Server 2008的

摘要兼容版本[VS]的VSTO

因為要創建表的一個版本。NetFramework版本和版本的Office和VSTO。
VSTO的是和

  • 微軟Visual Studio 2005工具為Office第二版運行時
  • 微軟Visual Studio 2005工具2007 Microsoft Office系統
  • 微軟的Visual Studio工具為Microsoft Office系統(版本3.0運行時)
  • 微軟Visual Studio 2010 Microsoft Office System的工具(4.0版運行時)

延長組件的辦公室,這個名字已經發生了微妙變化。
基本上不應該是一個問題,如果以下三個以上兩隻眼睛被省略。
(或者說,我也省略了前三,但將無法對應的兩個終端,在2003,2007,2010)

VSTO 辦事處的支持 。NetFramework支持 支持VisualStduio Windows支持
2005 SE的 2003年,2007年 2.0 2005年 2000年,XP,Server 2003中,Vista中,7,Server 2008中
3.0 2007 3.5 SP1中 2008 2000年,XP,Server 2003中,Vista中,7,Server 2008中
4.0 2007,2010 3.5 SP1中 2010 XP,Server 2003中,Vista中,7,Server 2008中

指令

注意隔離部分的編寫跨平台的代碼依賴於平台的預處理器指令。

  • 編譯器
    • 海灣合作委員會
      • #IFDEF _ GNUC__
        • 或以上#如果__ GNUC__> = 3 / / GCC3.0
    • 用Borland C + +
      • #IFDEF _ BORLANDC__
    • 英特爾編譯器
      • #IFDEF _ INTEL_COMPILER
    • 微軟的編譯器
      • #IFDEF _MSC_VER
        • 以後如果_MSC_VER> = 600 / / C編譯器6.0 +包括#的VC
        • 以後如果_MSC_VER> = 700 / /的C / C + +編譯器7.0 +包括#的VC
        • #後來如果_MSC_VER> = 800 / / VC + +1.0
        • #後來_MSC_VER> = 900 / / VC + +2.0
        • #後來如果_MSC_VER> = 1000 / / VC + + 4.0
        • #後來如果_MSC_VER> = 1010 / / VC + +4.1
        • #後來如果_MSC_VER> = 1020 / / VC + + 4.2
        • #後來如果_MSC_VER> = 1100 / / VC + +5.0
        • #後來如果_MSC_VER> = 1200 / / VC + + 6.0
        • #如果_MSC_VER> = 1300 / / VC2002(VC7.0)
        • #如果_MSC_VER> = 1310 / / VC2003(VC7.1)
        • #如果_MSC_VER> = 1400 / / VC2005(VC8.0)
        • #如果_MSC_VER> = 1500 / / VC2008(VC9.0)
        • #如果_MSC_VER> = 1600 / / VC2010後(VC10.0)
  • UNIX系統
    • UNIX的
      • #IFDEF _ UNIX
      • #IFDEF _ unix__
    • Linux的
      • #IFDEF _ LINUX
      • #IFDEF _ linux__
    • FreeBSD的
      • #IFDEF _ FreeBSD__
    • NetBSD的
      • #IFDEF _ NetBSD__
    • Cygwin的
      • #IFDEF _ CYGWIN__
      • #Cygwin的版本IFDEF __ CYGWIN32__ / / 32位
    • MinGW的(MNO-cygwin的)
      • #IFDEF _ MINGW32__
  • Windows系統
      • #IFDEF _CONSOLE
    • 圖形用戶界面
      • #IFDEF _WINDOWS
    • 32位Windows
      • #IFDEF WIN32的
      • #IFDEF _WIN32
    • 64位Windows
      • #IFDEF _WIN64
    • Windows版本
      • #IFDEF的WINVER
        • 由於#(WINVER> = 0x030a)/ / Windows 3.1的
        • #自95 / NT 4.0(WINVER> = 0×0400)/ / Windows的如果
        • 由於#(WINVER> = 0×0410)/ / Windows 98中
        • 由於#(WINVER> = 0×0500)/ /視窗ME / 2000
        • 由於#(WINVER> = 0×0501)/ /的Windows XP / Server 2003中
        • #自2003年以來SP1(WINVER> = 0×0502)/ /的Windows XP SP2中/服務器,如果
        • 由於#(WINVER> = 0×0600)/ /的Windows Vista / Server 2008中
        • 由於#(WINVER> = 0×0601)/ / Windows 7的
      • #IFDEF _WIN32_WINDOWS / /在Windows9x
        • #如果以後(_WIN32_WINDOWS> = 0×0400)/ / Windows 95中
        • #如果以後(_WIN32_WINDOWS> = 0×0410)/ / Windows 98的
        • #如果以後(_WIN32_WINDOWS> = 0×0500)/ / Windows的我
      • #IFDEF _WIN32_WINNT / / WindowsNTx的
        • 由於Windows 2000 / /(0×0500)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WIN2K)
        • / /由於2003年的Windows XP /服務器(0×0501)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WINXP)
        • / /自2003 SP1的Windows XP SP2中/服務器(0×0502)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WS03)
        • / /從Windows Vista(0×0600)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_VISTA)
        • / /從Windows Server 2008(0×0600)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WS08)
        • / /從Windows 7(0×0601)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WIN7)
      • #IFDEF _WIN32_WCE / / WindowsCE的
        • #如果(_WIN32_WCE> = 0×0420)/ /的Windows Mobile 2003(PPC2003)
        • #如果(_WIN32_WCE> = 0×0421)/ /的Windows Mobile 2003 SE(PPC2003SE)
        • #如果(_WIN32_WCE> = 0×0501)/ /的Windows Mobile 5.0
        • #如果(_WIN32_WCE> = 0×0502)/ /的Windows Mobile 6專業版/經典
        • #如果(WINCEOSVER> = 0×0300)/ / WindowsCE3.0(PPC2002)
        • #如果(WINCEOSVER> = 0×0420)/ / WindowsCE4.2後(PPC2003)
        • #如果(WINCEOSVER> = 0×0500)/ / WindowsCE5.0(WM5.0)
    • Internet Explorer版本
      • #IFDEF _WIN32_IE
        • #如果(_WIN32_IE> = 0×0200)/ /的Windows 95/NT 4.0(4.00的Comctl32.dll,Shell32.dll的4.00)
        • #如果(_WIN32_IE> = 0×0300)/ /的Internet Explorer 3.0,3.01,3.02
        • #如果(_WIN32_IE> = 0×0400)/ / Internet瀏覽器4.0
        • #如果(_WIN32_IE> = 0×0401)/ /互聯網瀏覽器4.01
        • #如果(_WIN32_IE> = 0×0500)/ /的Internet Explorer 5.0,5.0A,5.0b
        • #如果(_WIN32_IE> = 0×0501)/ / Internet Explorer的5.01
        • #如果(_WIN32_IE> = 0×0550)/ /因特網瀏覽器5.5
        • #如果(_WIN32_IE> = 0×0600)/ / Internet瀏覽器6.0
        • #如果(_WIN32_IE> = 0×0601)/ /互聯網瀏覽器6.0 SP1的
        • #如果(_WIN32_IE> = 0×0603)/ /互聯網瀏覽器6.0 SP2
        • #如果(_WIN32_IE> = 0×0700)/ /因特網瀏覽器7.0
        • #如果(_WIN32_IE> = 0×0800)/ / Internet Explorer的8.0

注意<br />預處理,視為0未定義的標識符,#如果__ GNUC__> = 3或更多,但可以作為GCC3
如果您嘗試確定#__ GNUC__ <3是否系統GCC2,包括那些不海合會。
參考

獲取的Windows版本

但我不認為我可以使用,初步注意。
如果編譯器可以編譯沒有問題,我想系統的Windows。
暫定,編譯,並確認在MinGW進行操作。

 #include <windows.h> #include <stdio.h> int main(void) { unsigned int GV = GetVersion(); printf("GetVersion API(GV) = %08X\n\n", GV); printf("_winver = %08X\n", _winver); printf("_winmajor = %08X\n", _winmajor); printf("_winminor = %08X\n", _winminor); printf("_osver = %08X\n\n", _osver); printf("(( GV << 8 ) | (( GV >> 8 ) & 0XFF)) & 0XFFFF = %08X (= _winver)\n", (( GV << 8 ) | (( GV >> 8 ) & 0XFF)) & 0XFFFF ); printf("GV & 0XFF = %08X (= _winmajor)\n", GV & 0XFF ); printf("( GV >> 8 ) & 0XFF = %08X (= _winminor)\n", (( GV >> 8 ) & 0XFF)); printf("GV >> 16 = %08X (= _osver)\n\n\n", (GV >> 16) ); // Windows version(_winmajor, _winminor, _osver) printf("This system is ["); if ( _osver < 0X8000 ) { // NT Group (_osver LowWORD MSB = 0) switch (_winmajor) { case 3: case 4: printf ("Windows NT %u.%u Build %u", _winmajor, _winminor, _osver); break; case 5: switch (_winminor) { case 0: printf ("Windows 2000 Build %u", _osver); break; case 1: printf ("Windows XP Build %u", _osver); break; case 2: printf ("Windows Server 2003 family Build %u", _osver); break; default: printf ("NT Group Windows Build %u", _osver); } break; case 6: switch (_winminor) { case 0: printf ("Windows Vista or Windows Server 2008 Build %u", _osver); break; case 1: printf ("Windows 7 Build %u", _osver); break; default: printf ("NT Group Windows Build %u", _osver); } break; default: printf ("NTGroup Windows Build %u", _osver); } } else { switch (_winmajor ) { case 0: //Win32s Group case 1: case 2: case 3: printf ("Win32s Build %u", _osver & 0X7FFF); break; case 4: // 9X Group (_osver is invalid.) switch (_winminor) { case 0: printf ("Windows 95 Build ----"); break; case 10: printf ("Windows 98 Build ----"); break; case 90: printf ("Windows Me Build ----"); break; default: // To make sure printf ("Newer than Windows Me"); } break; default: // To make sure printf ("Newer than Windows Me"); } } printf("]"); return 0; } 
1 2 3

首頁 文件>

搜索
翻譯
Japanese flagItalian flagKorean flagChinese (Simplified) flagChinese (Traditional) flagEnglish flagGerman flagFrench flagRussian flagVietnamese flagThai flag

回到頁面頂部