win10密钥怎么找

win10密钥怎么找,第1张

Windows产品密钥是由25个字符组成的代码,用于激活Windows。

1、从何处查找产品密钥取决于你获得Windows副本的方式。

2、从授权零售商处获取。产品密钥在标签上或者在Windows随附包装盒中的卡片上。运行Windows的新电脑。产品密钥预安装在电脑上、随附在电脑包装中,或包含于电脑随附的真品证书(COA)中。

3、从Microsoft网站获取数字副本。产品密钥在购买后收到的确认电子邮件中。或者,如果购买了Windows10,产品密钥会作为数字许可证分配,在此情况下不会包含产品密钥。

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。

1、按下Win+R打开运行,输入:regedit点击确定打开注册表编辑器。

电脑密钥在哪找

2、然后依次展开:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/SoftwareProtectionPlatform

电脑密钥在哪找

3、在右侧双击打开:BackupProductKeyDefault,其数值数据就是我们当前Win10激活密钥了。

电脑密钥在哪找

4、或者我们按下快捷键Win+X,打开系统设置菜单,找到系统并点击进入。

电脑密钥在哪找

5、在最下方就可以看到自己的密钥了。

找windows产品密钥的方法为:在Windows设置界面里,搜索“控制面板”,点击它进入其中。在控制面板界面里,找到“系统”选项,点击它进入其中。在系统界面里,找到Windows激活一栏,其中的产品ID就是产品密钥。

从Microsoft网站获取数字副本。产品密钥在购买后收到的确认电子邮件中,或者,如果购买了Windows10,产品密钥会作为数字许可证分配,在此情况下不会包含产品密钥。密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。

windows介绍

Microsoft Windows是美国微软公司以图形用户界面为基础研发的 *** 作系统,主要运用于计算机、智能手机等设备。共有普通版本、服务器版本(Windows Server)、手机版本(Windows Phone)、嵌入式版本(Windows CE、Windows for IoT)等子系列,是全球应用最广泛的 *** 作系统之一。

截至2022年8月5日,Microsoft Windows更新推送系统三十余个,普通版本已更新至Windows11,服务器版本已更新至Windows Server2022,手机版本已终止研发,最后版本为Windows10Mobile,嵌入式版本为Windows CE(后被Windows for IoT取代)。此外,还有提供线上Web服务的Windows365。

Windows 产品密钥是由 25 个字符组成的代码,用于激活 Windows。

从何处查找产品密钥取决于你获得 Windows 副本的方式。

从授权零售商处获取。产品密钥在标签上或者在 Windows 随附包装盒中的卡片上。运行 Windows 的新电脑。产品密钥预安装在电脑上、随附在电脑包装中,或包含于电脑随附的真品证书 (COA) 中。

从 Microsoft 网站获取数字副本。产品密钥在购买后收到的确认电子邮件中。或者,如果购买了 Windows 10,产品密钥会作为数字许可证分配,在此情况下不会包含产品密钥。

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。

][PATH][NAME][[/A][:attrib]][/o:[sorted][/s][/b][/l][/c[h]

(1)dir /a:attrib 缺省包含所有文件(系统文件隐含文件)

attrib[:][h/-h]只显示隐含文件或非隐含文件

[r/-r]只显示只读文件或非只读文件

[s/-s]只显示系统文件或非系统文件

[a/-a]只显示要归档文件或非归档文件

(2)/o[:]sorted:缺省完全按字母顺序,子目录显示在文件之前

/o[n/-n]:按字母顺序或按文件名顺序/反向显示

[e/-e]:按扩展名字母顺序/反向显示

[d/-d]:按时间顺序/反向显示

[s/-s]:按大小从大到小或/反向显示

[g/-g]:按子目录先于文件或文件先于子目录

(3)/s 参数:对当前目录及其子目录中所有文件进行列表

列名ir /s/a/o:n c:\>PRN

将c盘上的所有子目录和文件按隶属关系并根据子目录和文件字母顺序打印输出

(4)/B 参数:将只显示文件名与扩展名

(5)/L 参数:将全部用小写字母对文件或子目录进行列表

训练:

dir /a 列当前目录所有文件(含隐含及系统文件)

dir /ah 列隐含文件(包含子目录(隐含的) dir /a-h

dir /as 列系统文件 dir /a-s

dir /ad 列子目录 dir /a-d

dir /o 按字母顺序

dir /B 只显示文件名与扩展名

二、attrib [+r|-r] [+a|-a] [+s|-s] [+h|-h] [d: ] [name] [/s]

缺省 attrib name 显示文件的(文件)属性

attrib iosys (或子目录)

shr c:\ iosys 指定为系统(s) 隐含(h) 只读(r)文件

也可以attrib sys 显示扩展名为sys的文件属性

参数 [+r|-r] 将文件属性设置或解除 只读属性

[+a|-a] 将文件属性设置或解除 归档属性

[+h|-h] 将文件属性设置或解除 隐含属性 (尤其对子目录也起作用)

/s 参数 将当前及当前子目录下的所有文件均起作用

可以用来查找文件

例子:

attrib news86 列news86的文档属性

attrib +r reporttxt 设置为只读 attrib -s -h recordtxt

attrib +a a:

attrib -a a:bak

xcopy a: b: /a 将A盘上的所有标志为"归档"属性的文件拷到B盘

xcopy a: b: /m 将A盘上的所有文件拷到B盘后并移去归档属性

三、cd 介绍: cd返回上二级目录 ""代表当前目录 ""代表父目录

cd \返回到上级目录的父目录(祖目录)

cd A:\ 将A盘的当前目录改为根目录

cd A:\xx 将A盘的当前目录改为子目录xx下

cd \98 先返回父目录,再进入父目录下的98子目录

cd 返回到父目录

cd\98 进入根目录下的98子目录

四、copy [/y][/-y][/v][ /B]

copy /y 不加提示,对所有文件加以覆盖

/-y 加以提示,对所有文件 (yes或no提问 )

/v 拷贝以后加以校验

/B 按二进制进行显示

copy w1wps con/b 可以将wps文件在屏幕上显示,而不必进入wps状态

copy \98 将父目录下的98子目录下的所有文件全拷到当前子目录

copy \97 当当前目录下的97子目录下文件全部拷到当前目录

copy c:\ 将当前目录下的所有文件拷到c盘根目录

意味着 文件

copy nul aabc 将aabc 文件清空(文件长度改为0)

copy 文件名+con 向文本文件中追加命令或内容

copy con 文件名 创建文本文件(F6存盘退出)

copy con prn 检测打印机的开关

五、xcopy命令

xcopy [source] [date] [/p] [/s] [/e] [/v] [/y]

xcopy [date] xcopy a:b:\ /d:08/18/98/s/v 拷贝980818年后的文件

xcopy [/p] 提示创建子目录

xcopy [/s] 连带子目录一起拷贝 注意:若目标盘上不存在此子目录,而在目标

盘的结束符又不以"\"为结束,则将提示:

does destination specify a file name or directory name on the target

[f=file,d=directory]

在目标盘上创建文件[按下]还是创建子目录[按下d] 应选择d键

xcopy[/v] 带较验

1) xcopy 不拷贝系统和隐含文件,应先予以修改属性再拷贝

xcopy [/y] 覆盖时是否有提示, /y 不带提示

若省略目标盘或子目录名,则拷贝到当前目录下

六、 del /p

加/p 可以在删除前是否提示

如del后加子目录名,则将子目录下所有文件(隐含系统只读文件除外)全删除,

加/p则可以确认

七、undelete [name] /au

不加提示地将所有满足条件的文件恢复(能够恢复的),并将首字母置成"#",若已

存在,则按"# % & 0 1 2-9 a-z"顺序加上

如:undelete dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头,作为文件

名, /list 仅列出可恢复的文件,而不恢复

undelete /load 将undelete装入内存

/unload 将undelete卸出内存

/s[drive]对指定驱动器进行监测管理

undelete/sc

将 undelete驻留内存,并创建一个隐含的sentry 子目录对c盘删除的文件进行

管理 undelete/ds 恢复

相应恢复命令可以用undelete即可完整恢复出文件名(非常完整)

最常用undelete

deltree /y [driveath]

deltree 删除子目录及文件,尽管有些文件是系统文件或隐含文件

它可以带有通配符,带有通配符时,它将删除符合条件的文件及子目录

如:undelete dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头作为文件

/list 仅列出可恢复的文件,而不作恢复 *** 作

undelete/load 将undelete 装入内存

/unload将undelete 卸出内存

/s[drive] 对指定的驱动器进行监视管理

undelete/sc 将undelete 驻留内存,并创建一个隐含的sentry子目录对C盘删除

的文件进行管理相应恢复命令可以用undelete/ds 即可完整恢复出文件名(很完善)

最常用的是undelete

八、deltree /y [driveath]

deltree 删除子目录及文件,尽管有些文件是系统或隐含的

它可以带有通配符,这时它将删除符合条件的文件或子目录

如:存在L1文件,L2子目录,L3文件,L4子目录

deltree L 将删除以上所有的文件和子目录,但在删除前加以确认,若不删除,

可以输入"N"

/y 参数是在删除时不加以确认就进行 *** 作的

它删除的文件可以用undelete恢复,但不能恢复子目录及其下的文件,可以用特

殊工具如NORTON 80 等

若提前使用了undelete/s,则可以在sentry子目录下找到完整的文件,但名已经

改变了

九、dos=high[|low[umb|noumb]]

dos=high,umb 则dos将自身装入高端内存(high)并能管理上位内存(umb)

noumb 则不管理上位内存

在写入dos=high及umb 前应装入device=himemsys

为了将程序或驱动程序装入上位内存,必须使用dos=umb,可省出大部分常规内存

可以在configsys的任何位置写上dos=high,umb

若显示hma not avoiable 或 load down low 则表明不能使用高端内存

十、doskey 记录以前敲过的dos命令,可以用F7来显示,用"↑↓"来选择,用F9来输入

选择的命令号

doskey/restall 重新装入一次,以前的命令行撤消

doskey/history 显示内存中所有的命令,可以">"显示到其它文件中,缩写"/H"

doskey dir=cls 则击入dir等同于cls一样

doskey/macros 可显示所有的宏定义,可使用">"重定义到文件中,可缩写"/M"

doskey dir= 可撤消对dir 的宏定义

doskey p=dir$tdirexe/p$tdir c:\t$tdir c:\t$

$t为命令的区分符,而$为命令的结束符

doskey/insert(overstrike)在重新输入命令时,对旧命令的修改是插入还是覆

盖状态(默认)

十一、emm386exe

提供对扩展内存的管理,使应用程序象使用常规内存一样能够使用它

常见的用法是 在configsys 中

device=c:\dos\himemsys

device=c:\dos\emm386exe ram

d=64 将DMA 内存数量设置为64K

noems 提供对上位内存的访问,但不提供对扩展内存的访问

应注意的是在windows中最好不要用它,因为windows本身有对扩展内存进行管理

的程序应采用windows中的管理器

十二、fc 命令 fc/b dtdat dt2dat>b (作二进制代码比较)

比较两个文件,一般用作存取进度,修改游戏存储文件用

实际代码位置应加上0100 如:0000 05E4:00 67

实际用debug -e 修改时应加上0100 即 0000 06E4:00 67

后面加上重定向文件">P" 可以将比较结果输出到p文件中

十三、format /q /u /s /n:sectors /f:size /c

/q参数:快速格式化,仅扫描文件分配表和根目录区,仅对格式化过的磁盘有效

使用时应确保格式化过后没有增加新的坏道

/u参数:无条件格式化,并且不保存原来盘上的信息,可以防止"unformat"

/s参数:格式化为系统盘,也可以使用"sys"命令

/f:size size 可以为160 180 320 360 720 1200 1440 2800

/n:sector n可以为1 格式为单面盘,容量为160k 180k

可以为4 可以在5寸高密驱动器上格式化360k磁盘

可以为8 可以在5寸高密驱动器上进行8个扇区的格式化

/c 重新测试坏扇区,缺省时如果一个扇区标记为"坏",以后格式时就不在从新测

试,仅作标记,使用"/C"时可以从新测试

十四、unformat 命令

对用format 格式过,且未用"/u"参数的命令起作用,用它可以来重新修复已经损

坏的硬盘分区表,但对网络盘不起作用

unformat drive:[/l][/test][/p]

/l 显示每一个被unformat发现的文件和子目录,如果没有这个开关,只显示那些

破碎的文件和子目录,可以用ctrl+s 暂停,按任意键继续

/test 仅作一个测试,不作实际的修复工作,作模拟过程

/p 一边测试一边打印

注:这种方法不能保证修复所有的文件,尤其是格式化后又添加过数据的磁盘

恢复后的文件依次存放在subdir123等子目录中

十五、interlnk 语法 interlnk g=e ,它可以通过串口或并口在两机间进行通讯

将服务器端上的e驱动器映射为客户端的g驱动器,以后对客户端而言,所有对g的

*** 作都意味着对服务器的访问,取消映射的办法为interlnk g=

单独输入interlnk 则显示所有的映射情况

注意:interlnk 必须在装入interlnkexe 设备驱动程序才可以使用

所用的驱动器符号与configsys中lastdrvexe设置的数目有关可以作一个一

端为25针,另一端为9针的串行线实现,具体接线方式如下:

5 - 7 2 - 15

3 - 2 3 - 13

7 - 4 4 - 12

6 - 6 5 - 10

3 - 3 6 - 11

8 - 5 15 - 2

4 - 20 13 - 3

9针 25针 12 - 4

10 - 5

11 - 6

25 - 25

25针 25针

十六、interlnkexe 与intersvrexe

interlnkexe 重新定向对于客户驱动器或打印接口的请求到另外的服务器驱动

器或打印机

语法:configsys 中加入:

device=c:\dos\interlnkexe [drive:n][/noprinter][com][lpt]

十七、memmaker[/b][/batch][session][/swaprive]

使用memmaker能够优化内存配置,并将配置写入autoexecbat和configsys中

在这一过程中,需要重新启动几次机器

十八、memitem memcolor memdefault submenu 菜单选项include

autoexecbat 中如下: configsys中如下:

path c:\dos;c:\ucdos [menu]

doskey menucolor=15,1(前景色15,背景色1)

\mouse\mouse menuitem=base_config,this is a base

goto %config% ->选择项 menuitem=cced_config,this is a cced

选项 提示

:base_config menudefault=base_config,5

goto exit ->跳出 缺省为base_config,延迟时间5秒

:cced_config [common]

c:\dos\smartdrvexe /l device=c:\dos\himemsys

goto exit 各项都包含的共同部分

:exit ->结束 [base_config]

device=c:\dos\emm386exe ram

dos=high,umb

[cced_config]

device=c:\dos\smartdrvexe/double_buffer

include=base_config 包含base_config设置

可以根据计算机的在不同情况下的配置要求来选择

十九、mscdexexe 提供对光驱进行读写的程序

mscdex/drive [/Drive][/e][/k][/s][/l:letter]

典型:configsys 中device=c:\cdrom\cdromsys /d:mscd000

autoexecbat中 c:\dos\mscdex /d:mscd000 /l:g

配置了一个光驱,符号为g

参数/drive1为光驱身份号,须与configsys中的符号一致,可有多个

/d:mscd000 /d:mscd001

/e:使用扩展内存装入光驱驱动程序

/s:使光驱在ms_net或windows是否设置为共享光驱

/V是否在加载时显示内存

/L:letter 分配给光驱的盘符

/m:number 指定缓冲器的数目

应该注意的是:如果用smartdrvexe 加速对光驱的读写能力,应该在autoexec

bat中将mscdexexe 写在smartdrvexe 之前,smartdrvexe的使用可大幅提高

对驱动器的读写能力

二十、msd的使用

使用msd 可以整体检查计算机配置及系统信息

包括:驱动器参数,计算机cpu参数,内存大小参数,显示器类型,串并口情况,以

及各个IRQ占用情况,据此可以分析新增设备是否与原来设备有冲突

同时也可以通过分析内存驻留程序,判断内存中是否有病毒,有则标为""

二十一、prompt dos提示符

$q 等于号 $t 当前时间 $d 当前日期 $p 当前驱动器符号

$$ $号提示 $n当前驱动器 $g 大于号 $l小于号 $b 显示"|"管道号

$h 隐去提示符 $E显示"<-"号

对于其它文字,则直接显示文本本身prompt ljw,则显示为ljw提示符

prompt 则仅显示当前驱动器号及大于号

二十二、ramdrivesys 使用内存当做虚拟盘来使用

应注意,所有数据都存在于内存中,应及时将其存到硬盘中,否则掉电后或者死机

后将丢失全部数据,优点是运行速度快,但不能在windows中使用

示例:configsys: device=c:\dos\ramdrivesys /size[/e|a]

size为以k为单位的字节数,即建立的虚拟盘的大小

/e或/a 都是使用扩展内存来建立虚拟盘,加参数的前提是必须先加载内存管理

器himemsys及emm386exe

二十三、subst 将一个驱动器与一个子目录联接

如:将对A:\l1\l2 子目录的请求映射为S盘,则输入

subst s: a:\l1\l2 即可

这样使用dir s:等命令则显示的是a:\l1\l2子目录下的内容,其它copy del 一样

可以用subst s: d 来取消这种映射

可以用subst 来显示各种联接情况

注意:可以采用subst a: c:a 来建立一个对于A的读写盘对于某些安装软件

来说,必须使用A盘来安装,就可以使用先将所要安装的软件全部拷贝到C:a子

目录中,然后输入subst a: c:a,再转到A:,就可以进行软件的安装了

二十四、mem /c /m /p /d 常规内存显示程序

/c显示所有内存驻留程序的占用情况,分为conventional常规内存和uppermemory

高端内存占用,并显示总的占用情况(常规 高端 保留 扩展内存)

/p分页显示,页间暂停

/m后加模块名 如:/m msdos 显示dos系统内存的占用

/d对常规 高端 保留 扩展内存加以详细例表说明

通过分析,可以看出内存占用是否合理,以及各种程序是否正常加载,从而在此基

础上使用内存优化工具memmaker进行各种管理,同时又可以分析出一些程序死机

的原因,若有的地方显示"",则可以断定内存中有病毒的存在,有利于发现及消灭

二十五、各种管道工具的使用"> < >> <<"

将各种命令造成的输出或所需要的输入重新定向

如ir bat /b>p 可以将dir bat 例出的文件名输出到p文件中

time<p>>pbat

p文件中仅存在一个回车符,则可以将时间追加进pbat文件中

"> >>" 是将命令产生的输出重新定向,比如到文件或打印机中

>>产生的内容将追加进文件中,>则将原文件内容覆盖

"< <<" 是将命令所需要输入的内容重新定向

如:time<p 在批中可以是时间代码或回车符,可以以此改变时间

需要说明的是 "prn "为打印机, "null"为空设备

con 为显示器

type pbat>prn 可将pbat打印出来

copy null p 可将p文件删除掉

copy con p 可以在屏幕上编辑p文件,F6可以存盘退出

type p>pp 完成p文件到pp 的复制

type p|more 可在屏满时暂停显示

二十六、move 命令

move [y/-y] filename1 filename2

将文件1移动到文件2处

如:move c:\dos\ c:\cced

将dos子目录下的所有文件全部移动到cced 子目录下

/y|-y参数在目标目录不存在需要创建时,是否出现提示

可以使用该命令修改子目录名称,如 move dos cced

将dos目录名改为cced

二十七、append 指定一些特殊数据文件的存放位置,如userdat pe2pro等一些非

exe com bat 文件

格式:append [:]终止以前存在的指定目录 append 显示指定情况

append [path] append c:\user 等

二十八、

call 在一个批处理命令中调用另外一个批处理文件

(1)不终止现有文件的运行,执行完掉用程序后立即返回

(2)被调用批处理命令必须以bat 为扩展名

(3)调用批处理文件时,可以加上参数(%1-%9)以及环境变量如%baud%

(4)不能使用管道工具及重定向工具

二十九、device devicehigh loadhigh

device 将指定的设备驱动程序装入内存中

devicehigh将指定的设备驱动程序装入高端内存中

loadhigh 将指定的设备驱动程序装入高端内存中

三十、defrag 优化磁盘

legend(传奇) optimize(优化) elapse(逝去) fragment(碎片)

该命令执行对指定的盘进行优化处理(包括检查文件分配表,各文件状态,纠正错误),

在执行时,可按照文件名大小,时间,扩展名对文件进行排序

另外,团IDC网上有许多产品团购,便宜有口碑

给出一个windows下dll的实例。linux下a的静态库只是头文件和编译有所不同,另外需要将编译后的动态库文件放入/usr/lib下,使用ldconfig载入。

一 先制作一个系统中有的DLL文件(cpp给出的sdk接口)

既然是测试我们就把我们这个dll叫做testDll吧,为了简单其间,我只写一个add方法,就是简单的2个数字相加,对于真正的开发中我们肯定会遇到其他类型,java到c/cpp中类型需要转换,具体类型转换对应关系g一下就能得到,我也不在列举。c/cpp中一个class一般包含2个文件,一个头文件定义(h),一个文件主体(c/cpp)。啰嗦了这么多还是直接动手吧,先在vs2008中建立一个工程(当然你也可以直接编写不用这些IDE工具,gcc g++的命令自己g。下同,不在注释不在废话),选取win32工程

键入工程名字testDll,点击next选取DLL,然后点击完成

打开我们的testdllcpp,添加进我们的add方法

C++代码

1int add(int a,int b){

2 return a+b;

3}

int add(int a,int b){

return a+b;

}

注意到文件列表里并没有testDllh,因为我们要给出调用者一个接口,如果不给头文件,人家就没办法调用,所以我们就必须添加一个头文件testDllh。

C++代码

1#ifdef TEST_DLL

2#define TEST_API __declspec(dllexport)

3#else

4#define TEST_API __declspec(dllimport)

5#endif

6

7/ Set up for C function definitions, even when using C++ /

8#ifdef __cplusplus

9extern "C" {

10#endif

11

12TEST_API int add(int,int);

13

14/ Ends C function definitions when using C++ /

15#ifdef __cplusplus

16}

17#endif

#ifdef TEST_DLL

#define TEST_API __declspec(dllexport)

#else

#define TEST_API __declspec(dllimport)

#endif

/ Set up for C function definitions, even when using C++ /

#ifdef __cplusplus

extern "C" {

#endif

TEST_API int add(int,int);

/ Ends C function definitions when using C++ /

#ifdef __cplusplus

}

#endif

在这个头文件中我们把我们的add方法给定义了进去。注意到testdllcpp中#include "stdafxh",所以我们就把这个testDllh include进stdafxh里面。

按道理说我们的这个dll已经完成了,但是一般c/cpp给接口SDK的时候大都给h和lib,为了一步生成dll和lib,我们添加进一个testDlldef,有了这个文件就可以一步生成dll和lib。在source file里右键add new item ,选择Module-Definition File

键入testDll,OK了,我们可以直接build了。生成testDlldll和testDlllib。

把testDlldll扔到system32目录里等待我们高大威猛的java jni调用。

二 JNI

21 编写java文件

为了显示我们的与众相同,我们就把我们的这个java文件命名为Demojava顺便直接带上包名

,因为我们知道人家给我们的接口里有个add方法,所以我们就直接来个调用吧。

Java代码

1package comtestJnitestDemo;

2

3public class Demo {

4 static

5 {

6 //Systemoutprintln(SystemgetProperty("javalibrarypath"));

7 SystemloadLibrary("testDll");

8 SystemloadLibrary("jniDll");

9 }

10 public native static int add(int a,int b);

11

12}

package comtestJnitestDemo;

public class Demo {

static

{

//Systemoutprintln(SystemgetProperty("javalibrarypath"));

SystemloadLibrary("testDll");

SystemloadLibrary("jniDll");

}

public native static int add(int a,int b);

}

demojava代码暂时如此,我们把将要生成的jni的dll叫做jniDll,有童鞋讲,我不想用你这个烂名字jniDll多俗啊,没关系,你可以换,随你换,生成文件后你再换也可以,现在换也可以。

22 生成h头文件

javah命令,不多讲。生成的文件com_testJni_testDemo_Demoh这个文件的命名规则我就不多讲了,一目了然。

C++代码

1/ DO NOT EDIT THIS FILE - it is machine generated /

2#include <jnih>

3/ Header for class com_testJni_testDemo_Demo /

4

5#ifndef _Included_com_testJni_testDemo_Demo

6#define _Included_com_testJni_testDemo_Demo

7#ifdef __cplusplus

8extern "C" {

9#endif

10/

11 Class: com_testJni_testDemo_Demo

12 Method: add

13 Signature: (II)I

14 /

15JNIEXPORT jint JNICALL Java_com_testJni_testDemo_Demo_add

16 (JNIEnv , jclass, jint, jint);

17

18#ifdef __cplusplus

19}

20#endif

21#endif

/ DO NOT EDIT THIS FILE - it is machine generated /

#include <jnih>

/ Header for class com_testJni_testDemo_Demo /

#ifndef _Included_com_testJni_testDemo_Demo

#define _Included_com_testJni_testDemo_Demo

#ifdef __cplusplus

extern "C" {

#endif

/

Class: com_testJni_testDemo_Demo

Method: add

Signature: (II)I

/

JNIEXPORT jint JNICALL Java_com_testJni_testDemo_Demo_add

(JNIEnv , jclass, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

23 用c/cpp实现这个头文件

c/cpp中已经实现了这个add方法,我们只需要调用就可以啦。所以直接vs2008中建立一个dll工程,工程名我们就叫jniDll,具体过程不再多讲,方法同上面testDll的建立一样。在这个工程里kimmking把需要引用的包、文件等已经讲的很清楚了。打开jniDllcpp,添加下面代码

C++代码

1JNIEXPORT jint JNICALL Java_com_testJni_testDemo_Demo_add

2(JNIEnv env,jclass jobject,jint a,jint b){

3

4 return add(a,b);

5}

JNIEXPORT jint JNICALL Java_com_testJni_testDemo_Demo_add

(JNIEnv env,jclass jobject,jint a,jint b){

return add(a,b);

}因为int对应的类型就刚好是jint,所以就不需要转换,其他需要转换的类型自己g对应关系转换,注意释放。

这个工程里我们还需要打开 stdafxh添加

C++代码

1#include <jnih>

2

3#include "testDllh"

4#include "com_testJni_testDemo_Demoh"

#include <jnih>

#include "testDllh"

#include "com_testJni_testDemo_Demoh"

在编译这个jniDll工程的时候需要引入testDllh,com_testJni_testDemo_Demoh,另外添加testDlllib这个依赖。

好了做好这些后,build下,生成了我们期待已久的jniDlldll,把这个dll同样扔到system32下。

三 测试

本人特懒,不想写多余的class,所以直接修改Demojava 这也是刚才为什么讲暂时如此的原因

Java代码

1package comtestJnitestDemo;

2

3public class Demo {

4 static

5 {

6 //Systemoutprintln(SystemgetProperty("javalibrarypath"));

7 SystemloadLibrary("testDll");

8 SystemloadLibrary("jniDll");

9 }

10 public native static int add(int a,int b);

11 public static void main(String[] args) {

12 Systemoutprintln(add(7,2));

13 }

14}

package comtestJnitestDemo;

public class Demo {

static

{

//Systemoutprintln(SystemgetProperty("javalibrarypath"));

SystemloadLibrary("testDll");

SystemloadLibrary("jniDll");

}

public native static int add(int a,int b);

public static void main(String[] args) {

Systemoutprintln(add(7,2));

}

}

四 最后补充

如果系统已经加载过c/cpp的dll,我们就不用再SystemloadLibrary("testDll")了,加载一遍就可以了,因为我们刚才写的testDll系统没有加载,所以我就加载了一下。对于多个dll可以写多个SystemloadLibrary去加载,修改static{}里面的内容不需要重新生成dll,除非你多加了一个调用方法,如果你看清楚规则,就不用javah命令就可以直接编写头文件,用javah太麻烦了。

以上就是关于win10密钥怎么找全部的内容,包括:win10密钥怎么找、如何获得Windows产品密钥、产品密钥在电脑的哪里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9503608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存