⑴ 我的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添加就行了。