这是一个新手请求。我正在寻找有关 .dll 创建的资料。具体来说,我想从我制作的一个简单的 3D 引擎中创建一个 .dll 以了解该过程。我需要有关比维基百科页面更深入的动态链接库的信息,它们是如何创建的,需要什么,如何为“调试”和“发布”创建不同的 .dll 文件,如何为其创建 PDB 文件以及如何创建一个头文件,允许从 C++ 程序中轻松使用库。理论性很强的 Material (不是那么多,“如何在 visual studio 中创建动态链接库”)会很棒。
请分享有关该主题的好 Material ,我所能找到的只是一些信息,它并不能为我描绘画面。
最佳答案
从字里行间看,我认为您真的想了解一般的库而不是具体的 dll。 库 只是一个方便的对象(已编译)代码包,以及一些有关如何调用它的信息。在 C++ 中,这通常采用 .h 文件的形式。
对于静态库 (.lib),链接器以与处理所有其他类的方式完全相同的方式提取所需的代码。一个普通的类将被编译为目标代码 (MyClass.obj),当它们全部完成时,链接器将它们粘在一起并使用适当的地址连接任何对象间调用。这与 .lib 库文件的过程相同。您最终会得到一大堆可执行代码,其中包括您的类和其中的库函数。
对于动态库 (.dll),唯一的区别是链接(连接)发生在运行时而不是编译时,并且库目标代码保留在一个单独的球中 - dll文件。编译 exe 时,所有使用库中函数的调用都映射到 stub 函数。当 Windows 为您加载 dll 时,它会将 dll 代码粘贴到与您的进程相同的内存区域,并将 stub 函数连接到现在可用的实际函数。
唯一的区别是 dll 必须公开一个函数,Windows 在加载或卸载 dll 时可以调用该函数,以防 dll 想要进行任何初始设置/清除。这传统上称为 DllMain()。
如果您想了解库,我会先专注于创建静态 .lib,然后再担心 dll。这是大部分工作的地方。一旦你有了一个库,把它变成一个 dll 就很容易了。
创建库时您需要考虑的主要事情是如何公开您的API(应用程序编程接口(interface))。这就是您要向使用您的库的人公开的功能/类。您不必将它们全部公开,但您必须决定公开什么。您是要公开一些 C 风格的函数,还是要公开整个对象?这是设计库时真正的挑战。如果人们(和您!)会发现您的库有用,您应该尝试让您的 API 尽可能易于使用和显而易见。
至于 pdb 文件,不同命名的发布/调试模块,以及创建 .h 文件。这些与在 exe 中执行此操作时相同。
关于c++ - 从现有代码创建 .dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430960/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru