Trang chủ Tài liệu>
Lưu trữ tài liệu
Ghi chú: "Bạn đã vượt quá số lượng tối đa của con trỏ mở ORA-01000" [Java]
- 29 Tháng Sáu, 2011 12:00 AM
- Vật liệu
Ghi chú về các lỗi của OracleDB rằng: "Bạn đã vượt quá số lượng tối đa của con trỏ mở ORA-01000" đi qua ngày khác.
Trở thành một vấn đề như các mã sau đây
(Chưa được xác nhận hoạt động Thing để lộ mã để các công việc dịch thuật sẽ không đi, viết lại như một mẫu)
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(); } } }
Là phần nhấn mạnh rằng đã gây ra.
Bạn có biết Tại sao không?
Trước hết, hãy đặt một giá trị sử dụng như là một ô trống để tạo ra một tuyên bố biến, thu được trong vòng một, phát hành vào cuối.
Thoạt nhìn, nó trông như vậy gây ra rò rỉ là một bản phát hành, bạn có thể tìm thấy vấn đề và theo một quá trình.
"PrepareStatement" sẽ tạo ra một con trỏ ngầm cho việc chuẩn bị của SQL.
Các mã trong câu hỏi là rất nhiều tiềm ẩn mà con trỏ đã được tạo ra trong vòng lặp và biết rằng điều này.
Và nó đã được phát hành chỉ có một trong những "prepareStatement" cuối cùng đã được lưu trữ khi thoát ra khỏi vòng lặp.
Ví dụ, 19 là không phải là nó không được phát hành nếu quá trình là 20.
Vì vậy, những gì tôi nên viết nếu
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(); } } }
Có lẽ điều này theo cách này. Nếu bạn sử dụng PreparedStatement ".
Tôi phải làm gì; Close () trong bản tuyên bố như vậy nếu bạn muốn sử dụng nó cho Tadano "Tuyên Bố".
Ngoài ra năng động của [Java] đường dẫn lớp
- 20 tháng 6 năm 2011 12:00 AM
- Vật liệu
Lưu ý: Bây giờ chúng ta đã thực hiện theo cách của mình tôi nhìn, và bạn muốn tạo ra một chương trình với tài liệu tham khảo để làm mềm của Jar các WEB-INF/classes Tomcat và các hệ thống khác.
" One-Jar "hoặc" Jar Fat Nếu bạn nghĩ rằng có thể đáp ứng "và đã tận dụng lợi thế của.
Ngẫu nhiên, việc kiểm tra hoạt động đã được xác nhận rằng nó hoạt động ngay cả khi tóm tắt trong các Jar là 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 hỗ trợ của [C #] ứng dụng
- 17 Tháng 4, 2011 12:00 AM
- Vật liệu
Chú ý: Nếu bạn muốn thay đổi hành vi trong quản lý quyền và đặc quyền về phía ứng dụng
- Đánh giá từ thông tin cho dù các phiên bản của hệ điều hành đã được bắt đầu kể từ khi WindowsVista <br /> hoặc ứng dụng đang chạy trong một (hệ điều hành với UAC) sau 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; } - Khi họ đang có ... "Run as administrator" là <br /> hoặc ứng dụng đã được bắt đầu áp dụng với quyền quản trị
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; } - Người sử dụng bắt đầu ứng dụng <br /> Nếu bạn muốn biết liệu ứng dụng có thể được thúc đẩy để người sử dụng quản trị viên đã bắt đầu thậm chí nếu nó đã được bắt đầu với những đặc quyền thuộc nhóm quản trị hoặc Tổng
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; }Giống như không hoạt động tốt trong một số môi trường và các mã trên? Có thể đảm bảo rằng đoạn code dưới đây.
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; } - Với quyền quản trị tự khởi động lại nếu như cơ quan hành chính đã được yêu cầu khi chế biến <br /> khởi động lại ứng dụng với quyền quản trị
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(); } - Để hiển thị các biểu tượng của UAC (thẳng đứng) vào nút để thông báo cho người sử dụng sẽ yêu cầu các đặc quyền quản trị viên để tiếp tục các hoạt động để hiển thị biểu tượng <br /> (thẳng đứng) UAC nút phải có quyền quản trị (biểu tượng lá chắn và tài sản Win32API lá chắn biểu tượng SystemIcons.Shield có một sự khác biệt, nó đã được sử dụng như là tiêu chuẩn trong Windows 7 đó là Win32 API hơn.)
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 đèn nền thay thế cầu chì
- Ngày 05 Tháng 1 2011 12:00 AM
- Vật liệu
PSP-1000 màn hình không còn xuất hiện đột ngột.
Tôi nghe thấy những âm thanh, âm thanh được nghe nói cũng là một nút.
Và nhìn chằm chằm cứng, mỏng ー hiển thị đồ họa đã được.
Thực sự đi tiên phong và kiểm tra các thông tin trên mạng và sau đó để đoán đèn nền đã hết hạn từ tình huống này.
Ngay lập tức, phân hủy, và sau đó cố gắng để kiểm tra tính liên tục của các cầu chì nó lên đến tôi để xuất bản các vị trí của các cầu chì của đèn nền một cách cẩn thận.
Với một vạn năng kỹ thuật số nhưng không có phản ứng, bản thân các cầu chì đã không biết đó là những gì đúng góc vuông của 1.005 cầu chì kích thước con chip.
Ví dụ, nó sẽ không thể đo được hoặc nếu có màng mỏng trên bề mặt.
Tôi quyết định để thay thế thông số.
Thay thế cầu chì của 0.5A cho F4501 các.
Đầu tiên, như tôi nghĩ rằng từ bỏ không làm tan chảy các hàn nhưng đã suy nghĩ rằng bạn đang thay thế như là một chính sách.
Vì vậy, chúng tôi quyết định đặt song song.
(Nếu hiện có cầu chì vẫn còn sống, bởi vì hiện tại được chia) nếu điều này, nói đúng, nhưng nó cũng không tốt,
Nó được coi là phục hồi nếu các đèn nền trong công việc này, cầu chì không phải là tương tự như off,
Một cách riêng biệt nếu có là không có lý do chính đáng, do đó, bằng cách loại bỏ tốt.
Là, công tác phục hồi được thực hiện một cách an toàn đèn nền.
PSP là để chơi với một lần nữa.
Kurobox sửa chữa điện
- 04 Tháng 1 2011 12:00 AM
- Vật liệu
Cắm cung cấp điện vẫn còn Kurobox chị em, vô tình chạm vào điện, lưu ý rằng kể từ khi công việc sửa chữa đã phải tắt cầu chì
Gen là điều đầu tiên của hộp không có nhãn hiệu.
Nhưng thực sự nó sẽ kéo phích cắm điện được kéo ra một phích cắm điện, điện Kurobox không thiếu.
Màu xanh tia lửa đã chết sẽ chạm vào chân một cầu chì của điện kháng do các công việc như mất tích.
Điện không vào như dự kiến cũng áp dụng sức mạnh tay để đi vào giấc ngủ trong một vội vàng đưa ra không có mắt, để chắc chắn rằng bạn đã không thất bại.
Có, nếu sức mạnh để đi Kurobox đuôi. Nếu điều này xảy ra quá muộn.
Đã có để phục hồi và thay thế cầu chì, không phải có người trông giống như là trên mạng trong khi tìm kiếm thông tin vết lõm.
Nhưng hiện nay, ngay cả khi của một cầu chì thổi của bạn? Để xác minh tính liên tục của các cầu chì (F1) với một vạn năng kỹ thuật số và suy nghĩ.
Kết quả đã không được thực hiện. Điều này có nghĩa là các cầu chì đã hết hạn.
Điều này có thể là may mắn.
Cầu chì từ mạch có nghĩa là cắt bỏ để không gây thiệt hại các mạch khi nó trở thành điện áp quá mức hiện tại hoặc quá nhiều, bảo vệ mạch nhiệt độ bất thường, có một khả năng một phần khác không bị hư hỏng bởi vì có thể là người may mắn.
Và bạn có thể thấy sự liên tục của các cầu chì ngược lại, sẽ là một phần khác bị hư hỏng, rất khó để xác định nguyên nhân.
Vâng, các trung tâm phát thanh được Onuma đã được tìm kiếm một cầu chì 3A ở Akihabara với chì dựa trên các thông tin trên mạng.
Là 150 yen trong hai. Vấn đề đã được phát hiện với hành trình trở về trong khi tôi nghĩ rằng Akihabara thực sự, làm các công việc và ngay lập tức trao đổi
Bởi vì nó được viết với cầu chì 2A Nếu bạn nhìn kỹ vào bản gốc.
Nhưng di chuyển từ 3A hợp nhất chính nó, nhưng điều duy nhất kết nối các mạch, ngay cả khi nó là 2A quá dòng trở nên bình thường đến 3A.
Điều này là vì những thiệt hại tiềm tàng đến các bộ phận khác của cầu chì khi quá dòng được sinh ra, để trao đổi những người mới muốn mua 2A.
Cần lưu ý, có thể để retrofit mà không có vấn đề với chì chì của cầu chì bạn đã mua nhưng là một chút dày.
Và, chắc chắn rằng bạn có thể thành công bắt đầu Khi bạn sức mạnh lên.
Nếu bạn tìm thấy một cầu chì cố gắng để thay thế 2A pha chì · · ·
Tạo và ký giấy chứng nhận nhà xuất bản [VS] phần mềm
- Tháng Mười Một 27, 2010 12:00 AM
- Vật liệu
Lưu ý chữ ký phương pháp làm thế nào để tạo và ký giấy chứng nhận để tạo ra những điều.
Nếu bạn muốn sử dụng ClickOnce cài đặt VSTO hoặc chứng chỉ tự ký, giấy chứng nhận phải là Oreore và ông đã làm, những gì bạn cần.
Các công cụ bạn sử dụng WindowsSDK được bao gồm trong.
- Làm thế nào để tạo ra
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 - Phương pháp chữ ký
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
Tóm tắt thông tin phù hợp phiên bản VS] PIA
- Ngày 19 Tháng 11 2010 12:00 AM
- Vật liệu
Phiên bản của bảng NetFramework phiên bản của PIA với các phiên bản của Office và VSTO bảng được tạo ra trong qua.
PIA là ... và đó PrimaryInteropAssembly Microsoft Xin vui lòng yêu cầu.
| PIA | Văn phòng hỗ trợ | Hỗ trợ. NetFramework | Windows hỗ trợ |
|---|---|---|---|
| XP | XP | 1,1 | XP |
| 2003 | 2003 | 1,1 | 2000 SP3, XP, Server 2003 |
| 2007 | 2007 | 1,1 | 2000 SP4, XP SP2, Server 2003 |
| 2010 | 2010 | 2.0 hoặc cao hơn | 2000 SP4, XP SP2, Server 2003, Vista, 7, Server 2008 |
Tóm tắt thông tin phiên bản phù hợp [VS] VSTO
- Ngày 18 tháng 11 2010 12:00 AM
- Vật liệu
Được tạo ra bởi vì muốn có một phiên bản của bảng. NetFramework phiên bản và phiên bản của Office và VSTO.
VSTO là và
- Microsoft Visual Studio 2005 Công cụ cho các văn phòng Thời gian chạy phiên bản thứ hai
- Microsoft Visual Studio 2005 Công cụ cho hệ thống Microsoft Office 2007
- Microsoft Visual Studio Tools cho hệ thống Microsoft Office (phiên bản 3,0 Runtime)
- Microsoft Visual Studio 2010 Công cụ cho hệ thống Microsoft Office (phiên bản 4.0 Thời gian chạy)
Văn phòng cho phần mở rộng của thành phần là tên đã thay đổi tinh tế.
Về cơ bản không phải là một vấn đề nếu ba sau hai mắt ở trên được bỏ qua.
(Hoặc là, có thể tôi cũng bỏ qua ba đầu tiên, nhưng nó sẽ không thể tương ứng với hai kết thúc trong 2003,2007,2010)
| VSTO | Văn phòng hỗ trợ | Hỗ trợ. NetFramework | Hỗ trợ VisualStduio | Windows hỗ trợ |
|---|---|---|---|---|
| 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 |
Chỉ thị
- 4 Tháng Tám 2010 12:00 AM
- Vật liệu
Lưu ý để cô lập các phần phụ thuộc vào nền tảng chỉ thị tiền xử lý khi viết mã nền tảng.
- Trình biên dịch
- GCC
- # Ifdef __ GNUC__
- Hoặc hơn # nếu __ GNUC__> = 3 / / GCC3.0
- # Ifdef __ GNUC__
- Borland C + +
- # Ifdef __ BORLANDC__
- intel Compiler
- # Ifdef __ INTEL_COMPILER
- Microsoft trình biên dịch
- # Ifdef _MSC_VER
- # VC sau này nếu _MSC_VER> = 600 / / C Compiler 6.0 + + bao gồm cả
- # VC sau này nếu _MSC_VER> = 700 / / C / C + + Compiler 7.0 + + bao gồm cả
- # Sau đó nếu _MSC_VER> = 800 / / VC + 1,0
- # Sau đó nếu _MSC_VER> = 900 / / VC + 2,0
- # Sau đó nếu _MSC_VER> = 1000 / / VC + 4,0
- # Sau đó nếu _MSC_VER> = 1010 / / VC + 4,1
- # Sau đó nếu _MSC_VER> = 1020 / / VC + 4,2
- # Sau đó nếu _MSC_VER> = 1100 / / VC + 5,0
- # Sau đó nếu _MSC_VER> = 1200 / / VC + 6,0
- # Nếu _MSC_VER> = 1300 / / VC2002 sau (VC7.0)
- # Nếu _MSC_VER> = 1310 / / VC2003 sau (VC7.1)
- # Nếu _MSC_VER> = 1400 / / VC2005 sau (VC8.0)
- # Nếu _MSC_VER> = 1500 / / VC2008 sau (VC9.0)
- # Nếu _MSC_VER> = 1600 / / VC2010 sau (VC10.0)
- # Ifdef _MSC_VER
- GCC
- Hệ thống UNIX
- UNIX
- # Ifdef __ unix
- # Ifdef __ unix__
- Linux
- # Ifdef __ linux
- # Ifdef __ linux__
- FreeBSD
- # Ifdef __ FreeBSD__
- NetBSD
- # Ifdef __ NetBSD__
- Cygwin
- # Ifdef __ CYGWIN__
- # Cygwin phiên bản ifdef __ CYGWIN32__ / / 32bit
- MinGW (MnO-Cygwin)
- # Ifdef __ MINGW32__
- UNIX
- Hệ thống Windows
- CUI
- # Ifdef _CONSOLE
- GUI
- # Ifdef _WINDOWS
- Windows 32bit
- # Ifdef Win32
- # Ifdef _WIN32
- 64bit Windows
- # Ifdef _WIN64
- Phiên bản Windows
- # Ifdef Winver
- Kể từ khi # if (Winver> = 0x030a) / / Windows 3.1
- # Kể từ 95 / NT4.0 (Winver> = 0 × 0400) / / Windows nếu
- Kể từ khi # if (Winver> = 0 × 0410) / / Windows 98
- Kể từ khi # if (Winver> = 0 × 0500) / / Windows Me / 2000
- Kể từ khi # if (Winver> = 0 × 0501) / / Windows XP / Server 2003
- # Kể từ năm 2003 SP1 (Winver> = 0 × 0502) / / Windows XP SP2 / Server nếu
- Kể từ khi # if (Winver> = 0 × 0600) / / Windows Vista / Server 2008
- Kể từ khi # if (Winver> = 0 × 0601) / / Windows 7
- # Ifdef _WIN32_WINDOWS / / Windows9x
- # Nếu sau này (_WIN32_WINDOWS> = 0 × 0400) / / Windows 95
- Nếu sau đó (_WIN32_WINDOWS> = 0 × 0410) / / Windows 98
- Nếu sau đó (_WIN32_WINDOWS> = 0 × 0500) / / Windows Me
- # Ifdef _WIN32_WINNT / / WindowsNTx
- / / Kể từ khi Windows 2000 (0 × 0500)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_WIN2K) - / / Kể từ khi Windows 2003 XP / Server (0 × 0501)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_WINXP) - / / Từ 2003 SP1 Windows XP SP2 / Server (0 × 0502)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_WS03) - / / Từ Windows Vista (0 × 0600)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_VISTA) - / / Từ Windows Server 2008 (0 × 0600)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_WS08) - / / Từ Windows 7 (0 × 0601)
# Nếu (_WIN32_WINNT> = _WIN32_WINNT_WIN7)
- / / Kể từ khi Windows 2000 (0 × 0500)
- # Ifdef _WIN32_WCE / / WindowsCE
- # Nếu (_WIN32_WCE> = 0 × 0420) / / Windows Mobile 2003 (PPC2003)
- # Nếu (_WIN32_WCE> = 0 × 0421) / / Windows Mobile 2003 SE (PPC2003SE)
- # Nếu (_WIN32_WCE> = 0 × 0501) / / Windows Mobile 5.0
- # Nếu (_WIN32_WCE> = 0 × 0502) / / Windows Mobile 6 Professional / Classic
- # Nếu (WINCEOSVER> = 0 × 0300) / / WindowsCE3.0 sau (PPC2002)
- # Nếu (WINCEOSVER> = 0 × 0420) / / WindowsCE4.2 sau (PPC2003)
- # Nếu (WINCEOSVER> = 0 × 0500) / / WindowsCE5.0 sau (WM5.0)
- # Ifdef Winver
- Internet Explorer phiên bản
- # Ifdef _WIN32_IE
- # Nếu (_WIN32_IE> = 0 × 0200) / / Windows 95/NT 4.0 (4,00 Comctl32.dll, Shell32.dll 4,00)
- # Nếu (_WIN32_IE> = 0 × 0300) / / Internet Explorer 3.0, 3,01, 3,02
- # Nếu (_WIN32_IE> = 0 × 0400) / / Internet Explorer 4.0
- # Nếu (_WIN32_IE> = 0 × 0401) / / Internet Explorer 4,01
- # Nếu (_WIN32_IE> = 0 × 0500) / / Internet Explorer 5.0, 5.0a, 5.0b
- # Nếu (_WIN32_IE> = 0 × 0501) / / Internet Explorer 5.01
- # Nếu (_WIN32_IE> = 0 × 0550) / / Internet Explorer 5.5
- # Nếu (_WIN32_IE> = 0 × 0600) / / Internet Explorer 6.0
- # Nếu (_WIN32_IE> = 0 × 0601) / / Internet Explorer 6.0 SP1
- # Nếu (_WIN32_IE> = 0 × 0603) / / Internet Explorer 6.0 SP2
- # Nếu (_WIN32_IE> = 0 × 0700) / / Internet Explorer 7.0
- # Nếu (_WIN32_IE> = 0 × 0800) / / Internet Explorer 8.0
- # Ifdef _WIN32_IE
- CUI
Lưu ý <br /> tiền xử lý, điều trị như là định danh không xác định 0, # nếu __ GNUC__> = 3 hoặc nhiều hơn, nhưng có thể được sử dụng như GCC3,
Nếu bạn cố gắng để xác định # __ GNUC__ <3 cho dù hệ thống GCC2, bao gồm những không GCC.
Tài liệu tham khảo
Được các phiên bản của Windows
- Tháng Bảy 29, 2010 12:00 AM
- Vật liệu
Nhưng tôi không nghĩ rằng tôi có thể sử dụng, dự kiến lưu ý.
Nếu trình biên dịch có thể được biên dịch mà không có vấn đề và tôi nghĩ rằng hệ thống Windows.
Dự kiến, biên dịch và xác nhận hoạt động được thực hiện trong 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; } Trang chủ Tài liệu>
- Tìm kiếm
- Nuôi
- Dịch










