⑴ 我的delphi程序編譯了怎麼版本號沒有變啊
Project -> Options ->Version Info ->勾選"Include version information in project" 和 "Auto-increment build number"兩個復選框
這樣 全編譯 也就是 Build all Projects 的時候 文件的版本號會自動加1的
樓主可以試一下,有問題再Hi我
⑵ 怎麼知道java class文件JDK編譯的版本號
首先用一些二進制查看器打開class文件,比如od或者hexmp工具。
od -x hello.class
或者
hexmp hello.class
我們會看到類似於下面的輸出:
feca beba 0000 3300
這里我們看到前四個位元組是Java class的特殊符號,叫做magic欄位,用來告訴JVM這是個class文件,之後的兩個位元組是minor版本號,再之後的兩個位元組是major版本號,我們看到時33,對應下表我們知道33時JDK1.7編譯的版本號。
十六進制
JDK1.5 31
JDK1.6 32
JDK1.7 33
JDK8 34
因為Java是向後兼容的,所以高版本的兼容低版本的,所以有時候你遇到java報: unsupported major.minor version 51,那就是你用低版本的虛擬機去運行高版本JDK編譯的class文件了,所以低版本的虛擬機就抱怨了。這里的51是十進制,也就是十六進制的33,及對應JDK1.7,如果出現這種錯誤,你肯定是使用低於1.7版本的虛擬機去運行這個了。
⑶ 我的delphi程序編譯了怎麼版本號沒有變啊
你可以用下面的方式去取一下版本號,應該沒什麼問題!!!
定一個版本信息結構:
type
PFixedFileInfo = ^TFixedFileInfo;
TFixedFileInfo = record
dwSignature : DWORD;
dwStrucVersion : DWORD;
wFileVersionMS : WORD; // 次版本號
wFileVersionLS : WORD; // 主版本號
wProctVersionMS : WORD; // 建立次數(build)
wProctVersionLS : WORD; // 發行次數(release)
dwFileFlagsMask : DWORD;
dwFileFlags : DWORD;
dwFileOS : DWORD;
dwFileType : DWORD;
dwFileSubtype : DWORD;
dwFileDateMS : DWORD;
dwFileDateLS : DWORD;
end; // TFixedFileInfo
下面是取版本信息函數
function FileInfo( const FileName :String ) : TFixedFileInfo;
var
dwHandle, dwVersionSize : DWORD;
strSubBlock : String;
pTemp : Pointer;
pData : Pointer;
begin
strSubBlock := ';
// 取得文件版本信息的大小
dwVersionSize := GetFileVersionInfoSize( PChar( FileName ), dwHandle );
if dwVersionSize <> 0 then
begin
GetMem( pTemp, dwVersionSize );
try
//取文件版本信息
if GetFileVersionInfo( PChar( FileName ),dwHandle,
dwVersionSize,pTemp ) then
//查詢文件版本信息
if VerQueryValue( pTemp,PChar( strSubBlock ),
pData,dwVersionSize ) then
Result := PFixedFileInfo( pData )^;
finally
FreeMem( pTemp );
end; // try
end; // if dwVersionSize
end;
調用例子:
var
f1:string;
x :TFixedFileInfo;
begin
f1 := Application.ExeName;
x := FileInfo( f1 );
ShowMessage( f1 +
#13#10 'Version: ' + IntToStr( x.wFileVersionLS ) + '. ' +
IntToStr( x.wFileVersionMS ) +
#13#10 'Release: ' + IntToStr( x.wProctVersionLS) +
#13#10 'Build: ' + IntToStr( x.wProctVersionMS ) );
end;
**********************************
獲取文件版本信息
type
TFileInfo = packed record
CommpanyName: string;
FileDescription: string;
FileVersion: string;
InternalName: string;
LegalCopyright: string;
LegalTrademarks: string;
OriginalFileName: string;
ProctName: string;
ProctVersion: string;
Comments: string;
VsFixedFileInfo:VS_FIXEDFILEINFO;
UserDefineValue:string;
end;
function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string= ' '):
boolean;
const
SFInfo= ';
var
VersionInfo: Pointer;
InfoSize: DWORD;
InfoPointer: Pointer;
Translation: Pointer;
VersionValue: string;
unused: DWORD;
begin
unused := 0;
Result := False;
InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);
if InfoSize > 0 then
begin
GetMem(VersionInfo, InfoSize);
Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);
if Result then
begin
VerQueryValue(VersionInfo, ' ', Translation, InfoSize);
VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +
IntToHex(HiWord(Longint(Translation^)), 4) + ';
VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName '), InfoPointer, InfoSize);
info.CommpanyName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription '), InfoPointer, InfoSize);
info.FileDescription := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion '), InfoPointer, InfoSize);
info.FileVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName '), InfoPointer, InfoSize);
info.InternalName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright '), InfoPointer, InfoSize);
info.LegalCopyright := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrademarks '), InfoPointer, InfoSize);
info.LegalTrademarks := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName '), InfoPointer, InfoSize);
info.OriginalFileName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProctName '), InfoPointer, InfoSize);
info.ProctName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProctVersion '), InfoPointer, InfoSize);
info.ProctVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments '), InfoPointer, InfoSize);
info.Comments := string(pchar(InfoPointer));
if VerQueryValue(VersionInfo, ', InfoPointer, InfoSize) then
info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);
if UserDefine <> ' ' then
begin
if VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) then
info.UserDefineValue:=string(pchar(InfoPointer));
end;
end;
FreeMem(VersionInfo);
end;
end;
調用演示:
procere TForm1.Button1Click(Sender: TObject);
var
info: TFileInfo;
begin
if OpenDialog1.Execute then
begin
if GetFileVersionInfomation(opendialog1.FileName, info, 'WOW Version ') then
begin
Listbox1.Items.Add(OpenDialog1.FileName);
ListBox1.Items.Add( 'Comments: ' + info.Comments);
ListBox1.Items.Add( 'CommpanyName: ' + info.CommpanyName);
ListBox1.Items.Add( 'FileDescription: ' + info.FileDescription);
ListBox1.Items.Add( 'FileVersion: ' + info.FileVersion);
ListBox1.Items.Add( 'InternalName: ' + info.InternalName);
ListBox1.Items.Add( 'LegalCopyright: ' + info.LegalCopyright);
ListBox1.Items.Add( 'LegalTrademarks: ' + info.LegalTrademarks);
ListBox1.Items.Add( 'OriginalFileName: ' + info.OriginalFileName);
ListBox1.Items.Add( 'ProctName: ' + info.ProctName);
ListBox1.Items.Add( 'ProctVersion: ' + info.ProctVersion);
ListBox1.Items.Add( 'UserDefineValue: ' + info.UserDefineValue);
if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) then
listbox1.Items.Add( 'Debug:True ')
else
ListBox1.Items.Add( 'Debug:False ');
ListBox1.Items.Add( ' ');
end;
end;
end;
⑷ Keil下每編譯一次,怎麼做到程序版本號+1
這個需要結合其他命令才行。
Keil系列教程:
http://blog.csdn.net/column/details/13472.html
⑸ Java如何生成版本號比如0001 0002 0002
首先還是不太明白你說的這個「生成版本號」是什麼意思,如果只是生成一個自增序列的話
1、如果有oracle資料庫的話可以利用它的序列生成。
2、沒有oracle,用redis也行。
3、沒有資料庫,那就寫個文件來存取吧:
public class Test2 {
public static void main(String[] args) throws IOException {
System.out.println(getSequence("d:\test\sequence.txt"));
setSequence("d:\test\sequence.txt", "");
System.out.println(getSequence("d:\test\sequence.txt"));
}
//讀取序列
public static String getSequence(String sequenceFile) throws IOException {
FileInputStream fileInputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
File file = new File(sequenceFile);
fileInputStream = new FileInputStream(file);
inputStreamReader = new InputStreamReader(fileInputStream);
bufferedReader = new BufferedReader(inputStreamReader);
// 按行讀取字元串
String str;
if ((str = bufferedReader.readLine()) != null) {
return str;
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (bufferedReader != null) {
bufferedReader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
}
}
//設置序列,如果傳入的序列號為空,則在原序列的基礎上+1
public static void setSequence(String sequenceFile, String sequence) throws IOException {
if (sequence == null || sequence.isEmpty()) {
String oriSequence = getSequence(sequenceFile);
Objects.requireNonNull(oriSequence);
sequence = String.format("%04d", Integer.valueOf(oriSequence) + 1);
}
FileOutputStream fileOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
BufferedWriter bufferedWriter = null;
try {
File file = new File(sequenceFile);
fileOutputStream = new FileOutputStream(file);
outputStreamWriter = new OutputStreamWriter(fileOutputStream);
bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write(sequence);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
bufferedWriter.close();
}
if (outputStreamWriter != null) {
outputStreamWriter.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
}
代碼又擠在一起了:
⑹ Delphi 7 編譯生成可執行文件,無版本信息,如何處理才能出現版本信息
版本信息是在生成的可執行文件後,右鍵-屬性-版本 里會顯示的 ,或滑鼠移到那個程序上面時也有顯示,如果在Delphi里設置了版本號後還沒顯示,應該是你delphi的問題了,建議可以重裝下試試 ,
我用的是D7,測試過是正常的。
⑺ 怎麼查看編譯的Linux內核源代碼的版本信息
查看Linux內核源代碼的頂層Makefile
VERSION = 3
PATCHLEVEL = 14
SUBLEVEL = 17
EXTRAVERSION =
NAME = Remembering Coco
⑻ C++或者VB編譯dll或者lib的時候,如何加入版本號
打開這個DLL工程在菜單里選
Insert——Resource——Version
然後編輯你的Version就行了
=========================
我猜你的是static library吧?靜態庫是不能加入版本號的
========================
LIB有兩種的,一種是由DLL導出的LIB庫,一種是static lib;前者不包括任何操作代碼,只有一些符號信息;後面是包括代碼的LIB;前者的LIB有可能是帶的版本號的,後者是沒有版本號的;
以上純粹個人理解
⑼ 軟體的版本號怎麼決定的
GNU
風格的版本號管理策略
當項目初版本時,
版本號可以為
0.1
或
0.1.0,
也可以為
1.0
或
1.0.0,
如果你為人很低調,
我想你會選擇那個主版本號為
0
的方式;
當項目在進行了局部修改或
bug
修正時,
主版本號和子版本號都不變,
修正版本號加
1;
當項目在原有的基礎上增加了部分功能時,
主版本號不變,
子版本號加
1,
修正版本號復位為
0,
因而可以被忽略掉;
當項目在進行了重大修改或局部修正累積較多,
而導致項目整體發生全局變化時,
主版本號加
1;
另外,
編譯版本號一般是編譯器在編譯過程中自動生成的,
我們只定義其格式,
並不進行人為的控制.
Window
下的版本號管理策略
當項目初版時,
版本號為
1.0
或
1.00;
當項目在進行了局部修改或
bug
修正時,主版本號和子版本號都不變,
修正版本號加
1;
當項目在原有的基礎上增加了部分功能時,
主版本號不變,
子版本號加
1,
修正版本號復位為
0,
因而可以被忽略掉;
當項目在進行了重大修改或局部修正累積較多,
而導致項目整體發生全局變化時,
主版本號加
1;
另外,
編譯版本號一般是編譯器在編譯過程中自動生成的,
我們只定義其格式,
並不進行人為的控制.
另外,
還可以在版本號後面加入
Alpha,
Beta,
Gamma,
Current,
RC
(Release
Candidate),
Release,
Stable
等後綴,
在這些後綴後面還可以加入
1
位數字的版本號.
對於用戶來說,
如果某個軟體的主版本號進行了升級,
用戶還想繼續那個軟體,
則發行軟體的公司一般要對用戶收取升級費用;
而如果子版本號或修正版本號發生了升級,
一般來說是免費的.
⑽ 如何在程序編譯時自動加入版本號
可以在資源管理中添加版本資源,版本號是以資源的方式來添加的。在解決方案的項目中找到rc資源文件雙擊然後右鍵添加資源,找到Version添加就行了。