问题标签 [heat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
com - COM 注册失败:“自动化错误:系统找不到指定的文件”,将 dll 安装到 tlb 文件以外的其他文件夹时
我们有一个用 VB.NET 开发的 COM 组件(我们称之为 MyLib),供我们的 Access 应用程序(我们称之为 MyApp)使用。为此,我们需要使用生成的 MyLib.dll 和 MyLib.tlb 文件进行 COM 注册。当我将这两个文件安装到我们的 MyApp 文件夹中时,一切正常,COM 函数被正确调用。但是,当我将 dll 安装到一个公共文件夹时,我在标题中提到了一个错误 - 我这样做的原因是因为我们希望允许在同一台机器上安装不同版本的 MyApp。所以如果 COM 组件没有改变,我们当然希望在这些不同的版本之间共享它,让 Windows 来做引用计数。
我不确定应该将 MyLib.tlb 文件放在 MyApp 的安装文件夹中,还是与 MyLib.dll 相同的公共文件夹中。但无论如何,我尝试了两个位置,它们都给出了相同的错误。我尝试比较将 MyLib.* 放入 MyApp 文件夹的情况和将 MyLib.dll 放入公共文件夹的情况之间的注册表文件。除了我试图在 HKCR\Wow6432nodes\CLSID{MYCLSID}\InprocServer32 下注册的类的 CodeBase 之外,我看不到任何区别。我不明白的另一件事是在这两种情况下,在 HKCR\Wow6432nodes\CLSID{MYCLSID} 下都没有名为 TypeLib 的子键,
我不完全了解 COM 参考如何用于 Access 应用程序,所以如果我错了,请纠正我。谁能告诉我我做错了什么?注册共享 COM dll 的正确方法是什么(是否将 dll 和 tlb 都放入共享文件夹)?谢谢!
更新:
关于 COM 注册,我使用 WIX 创建 Windows 安装程序和 heat.exe 从 dll 和 tlb 文件中获取信息。生成的文件包括Class、ProgID、TypeLib 和Registry 标签的信息。正如我所提到的,从 WIX 配置的角度来看,我的两种情况之间的唯一区别是我放置 MyLib.dll 文件的位置(我假设将 MyLib.tlb 文件放在 MyApp 安装文件夹中是正确的方法,再次,请更正如果我错了),当我将 dll 和 tlb 文件都放入应用程序的安装文件夹时,它确实有效。这是注册后的一些注册表结构
首先我有 HKCR\CLSID\{MYCLSIDs},它们中的每一个都代表我的一个 COM 类。在名为“InprocServer32”的子项中,我有 Assembly、Class、CodeBase、RuntimeVersion、threadingModel。CodeBase要么是普通文件夹(不工作)要么是MyApp的安装文件夹(工作),这是我放置dll的不同位置。我认为 {MYCLSIDs} 下会有另一个子键 TypeLib,因为 Access 只看到 TypeLib,我认为应该有一些从 TypeLib 到实际 dll 的链接,但是,在这两种情况下,这个子键都丢失了,但在第二种情况它仍然有效。它有问题吗?
其次我有 HKLM\Software\Classes\CLSID\{MYCLSIDs},这个键的结构和上面描述的一样。
第三,HKCR\{MYPROGIDs},这些只是我班级的 ProgID
第四,HKCR\Typelib\{LibID},包含来自tlb文件的信息,这个ID来自COM组件项目的Assembly GUID。
最后是 HKEY_CLASSES_ROOT\Interface\{InterfaceID},有一个名为 ProxyStubClsid32 的子键,其值为 {00020424-0000-0000-C000-000000000046},一个名为 TypeLib 的子键,其值为我的 LibID。
似乎唯一的区别是第一项中的 CodeBase(我可能是错的,但这就是我所看到的)。如果您发现任何问题,请告诉我。谢谢!
第二次更新:
将 MyLib.dll 安装到共享文件夹后,COM 调用失败。但是,如果我将 SHARED_FOLDER\MyLib.dll 的所有 CodeBase 值替换为 INSTALLDIR\MyLib.dll,并将 MyLib.dll 复制到 INSTALLDIR,它实际上可以工作。反之亦然,在我将 MyLib.dll 安装到 INSTALLDIR 后(在这种情况下 COM 正在工作),我将 CodeBase 值从 INSTALLDIR\MyLib.dll 更改为 SHARED_FOLDER\MyLib.dll,并复制到 SHARED_FOLDER,这次它失败了。所以看来,正是安装位置的问题,和我对COM的理解相反。而且我认为 SHARED_FOLDER 没有权限问题(我可能是错的),因为它位于我的安装程序创建的文件夹中。
map - gnuplot 热图颜色范围
我在一个文件中有一些 XYZ 数据,我正在使用 gnuplot 来显示它。我正在创建一个热图,即。一个 2D 图,其中 Z 值使用颜色表示。现在我正在使用以下脚本:
我的问题是,gnuplot 忽略了调色板定义中的 0 和 1。它使用指定的颜色,但根据文件中的最小和最大 Z 值重新缩放。这使得很难直观地比较 z 范围不同的不同图。
如何告诉 gnuplot 停止重新缩放 z 颜色范围?
visual-studio-2010 - 在 Visual Studio 2010 中 heat 项目不支持 -var 参数吗?
我在使用命令时遇到问题
输出文件忽略此参数-var "var.SourceDir"并使用var.My.project.ProjectDir
Visual Studio 2010 返回此错误:
未定义的预处理器变量“$(var.My.project.ProjectDir)”。
C:\My.project\My.project.Installer\FilesFragment.wxs
我进行了搜索,但只找到了heat与参数dir一起使用的示例。
我在文档中没有找到任何说明heat 项目不支持参数-var的内容。
有解决办法吗?
wix - 利用 heat.exe 并收集已经本地化的文件名,并使用 wix 将它们包含到 msi
我有一个问题,我想做的事情是否可行,如果答案是肯定的,该怎么做。
我是 wix 的新手,并且一直在阅读有关如何动态地将文件夹包含到安装程序中的内容,最终我能够在 nant 中执行一项任务,该任务使用 heat.exe 生成 wxs 文件,然后将新生成的 wxs 文件添加到灯光和蜡烛任务。这允许我将文件夹的内容添加到 msi,然后安装该文件夹及其内容。
我的问题始于我添加到 msi 的文件夹包含名称已本地化的文件(这是一项要求)。
当我将文件添加到名称为俄语的目录结构中时,例如不是 1252 代码页,我收到错误消息:
[exec] ......Templates.wxs(65):错误 LGHT0311:提供的字符串包含指定数据库代码页“1252”中不可用的字符。将这些字符更改为数据库代码页中存在的字符,或通过修改以下属性之一来更新数据库的代码页:Product/@Codepage、Module/@Codepage、Patch/@Codepage、PatchCreation/@Codepage 或 WixLocalization /@代码页。
我尝试设置Product/@Codepage
为65001
(UTF-8),但这并没有解决问题。
最终,我想要做的是能够将文件夹及其内容添加到安装程序,然后其他人添加任意数量的文件,这些文件的名称已本地化到该文件夹中。这样,每当构建运行并随后创建 msi 时,msi 将包含该文件夹及其内容。
非常感谢您提前。
iphone - html5 和热传感器
我是 html5 编程的新手,正在考虑为 iphone 构建一个 html5 应用程序。我想知道 API 中是否有任何关于在 api 中感应触摸温度的信息?我的应用程序取决于手指触摸屏幕时的温度。有没有办法测量这个?如果没有,有没有办法测量施加在屏幕上的压力量?
谢谢!
c - 使用 SIMD 优化一维热方程
我正在使用 CFD 代码(用于计算流体动力学)。我最近有机会看到英特尔编译器在我的一个循环中使用 SSE,在这个循环中将计算性能提高了近 2 倍。但是,使用 SSE 和 SIMD 指令似乎更像是运气。大多数时候,编译器什么都不做。
然后我试图强制使用 SSE,考虑到 AVX 指令将在不久的将来加强这一方面。
我做了一个简单的一维传热代码。它由两个阶段组成,使用另一个阶段的结果(U0 -> U1,然后是 U1 -> U0,然后是 U0 -> U1,等等)。当它迭代时,它会收敛到稳定的解决方案。我在主代码中的大部分循环都使用相同类型的计算。(有限差分)。
但是,我的代码比正常循环慢两倍。结果是一样的,所以计算是一致的。
我犯错了吗?在超级计算机(使用 Westmer)上测试之前,我使用 Core 2 来测试循环。
这是代码,带有 SSE 循环,然后是参考循环:
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++
编辑 :
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++
考虑到你的回答,我找到了合适的地方来讨论这个问题,所以我将扩大话题并解释我的目标。如果您接受,我们将一个接一个地讨论所有循环。这可能很长,但对于我所在领域的很多人以及像 OpenFoam 这样的开源求解器来说,它可能非常有用。不考虑对能源消耗的影响(我们都使用大型超级计算器)。
我使用的 CFD 代码在 512 个 Westmer Core 上运行了 1 个多月。我正在使用 MPI(消息传递接口)在 procs 之间进行通信。物理场可以被视为一个网格,因此是 1D、2D 或 3D 阵列,具体取决于模拟的类型。但是 3D 是你能想象到的最好的。
完整的代码在 Fortran 95 中,实际上是 C 语言的简化。它很容易与 C 接口,并且 C 例程可以直接从 Fortran 调用,类型相同(int、double、long 等)。但是,Fortran 不允许这样的优化:它的设计很简单。这就是我研究 C 指令的原因。
在所有 CFD 代码中,我们都面临着相同的问题:3 种类型的循环和 MPI 内存分配。让我们首先讨论一下循环:
空间导数(称为有限差分):循环由所有情况下的 1D 卷积组成(1D、2D、3D,一次只能在一个轴上推导)(DF = F[i-1]*A + F[i ]*B + F[i+1]*C)。但是,当使用超过 1D 时,内存访问变为以下内容:
在第一个循环中,内存访问不继续(Fortran 中的反转,内存被反转)。这是第一个问题。使用 3D 数组时同上。
泊松方程分辨率,即矩阵乘法:循环由 1D、2D 或 3D 卷积组成,具体取决于模拟。这实际上是二阶导数 (DDF = D(DF))。
这个循环和我第一次给你的循环是一样的,但是它是直接计算的,不是偶数和奇数。
加权高斯赛德尔分辨率,即与波纹管相同的循环,但具有依赖性:
这是您之前调查的循环。
然后,我们面临另一个问题:内存分配。每个核心都有自己的内存,需要与其他人共享。让我们考虑最后一个循环,但经过简化:
考虑 n1=512,但由于 RAM 容量低,无法将其存储在本地内存中。内存分布在 core0 (1->255) 和 core1 (256-512) 上,它们不在同一台计算机上,而是在网络上。在这种情况下,i=256 中的导数需要知道点 i=255,但是这个值在另一个 proc 上。包含其他处理器值的内存称为 GHOST 内存。所以循环是:
我们需要处理这个问题。神秘的,你现在明白我要去哪里了:循环交错需要考虑到这一点。我认为这可以通过这种方式完成:
希望我没有在某处犯错索引。让我们暂时考虑第一种类型的循环,这是最简单的,然后我们可以通过循环 2 和 3,它们是相似的。目的是这样做(类似于图像处理):
我正在处理它,我将在几个小时内发布结果代码,同时考虑到您的建议。
wix - Heat.exe 生成的 Wix 注册表文件具有本地文件路径
我有一个目录,我用热量成功地收获了。
其中一个文件是需要注册 COM 互操作的 dll。
Heat 正在正确生成所需的 .reg 文件,但是,CodeBase
此文件中的值设置为构建服务器上的相对路径:
这意味着在安装到用户计算机时,由于路径不正确,文件未注册。
我尝试通过加热重新运行这个 reg 文件,看看它是否会做任何事情,但这没有帮助。相对路径仍然存在。
有没有办法用可以安装的文件路径生成 reg 文件?
com - 如何使用 Heat 生成可重用的 COM 注册组件?
我使用WIX 工具集中的heat util 来生成 dll 的 COM 注册。一切正常,直到只有一个产品使用该 dll。
但是当这个 dll 已经被另一个产品注册或被后来安装的产品使用时,卸载我的产品会删除 DLL 注册并破坏其他应用程序。
有没有办法克服这个问题?我有一个想法使生成的组件永久化,但看起来没有简单的方法来完成它。这不是理想的情况,因为如果我们的应用程序是使用该 dll 的人,最好删除 DLL 注册。
另一个问题是注册 dll 会更改以前的注册,即使它有较新的版本。它会再次破坏其他应用程序。如果已经安装,我们想使用 never 版本。
任何人都可以推荐一个简单的解决方案来克服所描述的问题吗?
installation - 如何调试未成功注册一个 OCX 的 WIX 安装?
我正在尝试创建一个 MSI,它将两个 OCX 文件放在 Program Files (x86) 文件夹中,并注册这两个 OCX 文件。
成功注册了两个 OCX 文件中的第一个(实际上在运行时使用了第二个 OCX)。第二个 OCX 未成功注册。我知道这一点,因为如果我在没有成功注册的 OCX 上运行 regsvr32,它就会在它所使用的应用程序中工作。
两个 OCX 文件的注册信息是使用获取工具 (heat.exe) 生成的。我在两个 OCX 上都使用了 heat 工具,所以我不明白为什么 OCX 注册只适用于其中一个,而不适用于两者。
我该如何调试呢?
xml - 使用 XSLT 从热量中修改 .wxs
我想使用 xslt 来编辑从 wix 中生成的 .wxsheat
文件
这是 components_en_us.wxs
但问题是我有其他 .wxs 文件(其他语言的 components_xx_yy.wxs)并且组件/文件 ID 是相同的。如果我使用这种方法编译我会得到一个错误
我用谷歌搜索,发现我可以使用 xslt 来更改 components_en_us.wxs 中的 Component/File id
所以,我期待像
现在,我从另一个问题中得到了这个 xslt,但我不知道如何按照我的意愿实现它。
所以,如果我的理解有误,请纠正我,也请帮助我处理 .xslt
提前致谢
编辑:这种方式是最佳实践,还是我应该做其他事情来解决这个重复错误。