我试图完成PC和操作系统如何相互作用的图片.我就是这样,在设备驱动程序方面,我几乎没有猜测.
请不要写太复杂的东西,或者在使用高编程语言和winapi函数时你不需要知道.我想知道,这是出于学习目的.
因此,操作系统和PC的基本结构(通过PC我的意思当然是HW)是我看到的除了直接CPU命令之外的其他所有CPU本身可以做的事情(算术运算,其寄存器访问和内存访问) )必须通过OS.主要是因为3级环,你不能使用进出其他硬件的入口.我知道有MMIO,但必须首先通过端口通信来设置.
它不是一直这样.即使我有点年轻还记得MSDOS,我知道你可以直接访问HW,因为没有限制,没有响铃模式.所以你可以写字符串到diplay使用DOS函数,或直接访问显卡内存并自己编写.
但随着操作系统的发展,不再存在这种可能性.但它很好,因为操作系统现在处理所有的硬件通信,坦率地说,它在多任务处理环境中更方便,更安全(我会说是唯一的选择).所以现在你不是使用int指令来使用BIOS映射函数或DOS函数,而是在内部调用dll,而不是处理你不需要知道的所有内容.
我理解这一点.我还可以理解,设备驱动程序是在0级环中运行的代码段,因此它可以执行所有HW交互.但我不明白的是操作系统和设备驱动程序之间的联系.我们举一个例子 - 我想让声卡发出声音.所以我将Windows API称为访问声卡,但会发生什么?Windows是否会调用设备驱动程序?
但是,如果它确实调用了设备驱动程序,是否意味着,所有可以通过winAPI函数调用的设备驱动程序,必须具有以某种特定方式命名的例程?我的意思是,当我有新的声卡时,它的驱动程序是否必须具有与旧声卡相同的功能?那么Windows实际上可以从它的角度调用相同的函数吗?但是,如果Windows具有由设备驱动程序处理的预定义功能集,则它不能使用在最新版操作系统出现之前存在的新驱动程序.
拜托,帮我理解这个烂摊子.我真的生气了.谢谢.
当我对旧的问题有一些进一步的问题时,有人建议我创建新的问题并参考旧的问题。所以,这就是最初的问题:什么是 C 运行时库?
好的,根据您的回答,我现在知道静态链接库是 Microsoft 对 C 标准函数的实现。现在:
如果我做对了,方案如下:我想使用 printf(),所以我必须包括<stdio.h>它只是告诉编译器有一个带有这些参数的函数 printf()。现在,当我编译代码时,因为 printf() 是在 C 标准库中定义的,并且因为 Microsoft 决定将其命名为 C 运行时库,所以它会自动从 libcmt.lib(如果 libcmt.lib 在编译器中设置)静态链接编译时间。我问,因为在维基百科上,在关于运行时库的文章中,运行时库是在运行时链接的,但是 .lib 文件是在编译时链接的,对吗?
现在,让我困惑的是什么。有 C 标准库的 .dll 版本。但我认为要链接 .dll 文件,您必须实际调用 winapi 程序来加载该库。那么,如果没有静态库提供代码来告诉 Windows 从 dll 加载所需的函数,如何动态链接这些函数?
关于这个主题的最后一个问题 - C 标准库函数是否也会调用 winapi,即使它们不是更高级的 WinAPI 函数那样的 .dll 文件?我的意思是,最终要访问帧缓冲区并打印某些内容,您必须告诉 Windows 这样做,因为操作系统不能让您直接操作硬件。我认为它就像必须编写操作系统以在类似版本中以相同的方式支持所有 C 标准库函数,因为它们是静态链接的,并且可以不同地支持更复杂的 WinAPI 调用,因为新版本的操作系统可以在 .dll 文件中进行调整.
我正在编写一个简单的3D SW渲染引擎.我有一个默认ArrayList<Object3D>包含整个场景.现在,我希望能够按名称添加,删除和选择对象,就像3D编辑一样(因为它比鼠标选择更简单,但在家庭作业中仍然看起来很好:)).
所以,我想到的第一件事就是拥有Hashtable名称和场景索引ArrayList.但是,我认为我可以Hashtable直接使用直接保存场景,然后使用迭代器进行渲染.
所以我想问一下,在3D引擎中,什么是速度优先?因为与选择对象相比,我将每秒多次循环场景.是ArrayList比任何更快iterated Hashtable?谢谢.
我想在Outlook 2010加载项中获取所有选定的电子邮件.我找到了这个MSDN教程,但我是C#的初学者,我不太明白这行代码:Object selObject = this.Application.ActiveExplorer().Selection[3];
我相信Selection[]像C#中被覆盖的运算符,索引器.但是,有没有办法看到它的实现?如果我浏览代码,我只看到接口但不看实现.所以我不知道Selection对象的结构.什么是真正的背后operator [].
另外,为什么所选项目从索引1开始而不是0?
考虑到这个Webpack 3.8.1配置。
// common
module.exports = {
context: path.resolve(__dirname, './src'),
entry: [
'whatwg-fetch',
'./index'
],
output: {
path: path.resolve(__dirname, 'build/assets'),
publicPath: '/assets/',
filename: 'main.js'
},
plugins: [
new CleanWebpackPlugin(['build']),
],
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
}
}, {
test: /\.(scss|css)$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader'
}, {
loader: 'sass-loader'
}],
}, {
test: /\.(png|jpg|gif|woff2|woff)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
}]
} …Run Code Online (Sandbox Code Playgroud) 我想用C语言从头开始编写一些简单的马里奥游戏.但老实说,我不知道怎么做,而且我找不到任何好的教程,这是免费的.
但是对于实际问题,我到目前为止只编写了WinAPI程序,因此所有事件处理和用户输入都由操作系统处理,只需要最少的工作,但是要开发游戏,例如菜单带有非矩形按钮,动画等等,我想,在WinAPI中没有这样的东西可以帮助我解决这个问题,而不仅仅是一些基本的例程鼠标指针位置和按键.
那么,通过操纵玩家,敌人甚至背景的对象来编写游戏来编写游戏引擎的整个绘图部分是正确的方法,而不仅仅是使用directdraw输出到屏幕?
编辑:我实际上想学习如何从头开始编写游戏,因为它必须是很好的编程经验,如果你考虑像DOS上的Commander Keen这样的游戏,没有框架或库创建,但仍然如此伟大.
我是SDL的新手,我很好奇为什么sdl使用静态和动态库?我的意思是,sdl.dll中有哪些函数,为什么它是动态链接而不是静态链接?谢谢.
我使用Patrick Lundin的Math免费解析器在C#中编写了简单的数学函数绘图仪.
现在,我的代码片段是这样的:
for (float value = -xaxis; value < xaxis; value += konst)
{
hash.Add("x", value.ToString());
double result = 0;
result = parser.Parse(func, hash);...
Run Code Online (Sandbox Code Playgroud)
这适用于在实数上定义的函数.但是,当我想要解析仅在R +上定义的函数时,例如ln(x),自然解析器将NaN赋予结果.
现在,我尝试通过异常处理来处理它,如下所示:
for (float value = -xaxis; value < xaxis; value += konst)
{
hash.Add("x", value.ToString());
double result = 0;
try{
result = parser.Parse(func, hash);
}
catch {
count = false; //just a variable I am using to draw lines
continue; // I hoped to skip the "wrong" number parsed until I came to …Run Code Online (Sandbox Code Playgroud) Spring MVC中最好的方式是只向表单中的一个字段发送一个字段?我需要发送选择框值,但我也希望选择框预先填充正确的值.
通常我会有一些表单支持对象,并将他绑定到表单,但是当我只有一个字段要发送时,我不需要任何表单支持对象.但是我没有使用form:form和form:select for binding因为它需要指定表单后备对象中的字段.
谢谢.
我需要PDFCreator COM interface从C#应用程序连接.为此,我使用VS生成的Interop包装器.但是有些客户端有不同版本的PDFCreator(我有1.2.1,有些有1.4.3),如果我使用Interop为1.2.1生成,我在使用包装器时会遇到异常.有没有办法解决?所以我的应用程序可以支持多个版本的PDFCreator?
另外,我不确定PDFCreator接口实际上是否已更改.是不是对COM对象的确切版本有一些锁定,我可以在生成Interop库时简单关闭?谢谢.
c# ×3
c ×2
java ×2
2d-games ×1
arraylist ×1
drivers ×1
ecmascript-6 ×1
hashtable ×1
interop ×1
material-ui ×1
pdf ×1
performance ×1
runtime ×1
sdl ×1
spring-mvc ×1
tree-shaking ×1
uglifyjs ×1
webpack ×1
windows ×1