问题标签 [c++builder-2010]

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.

0 投票
1 回答
1088 浏览

c++ - 英特尔 MKL 函数在内部调用 TerminateProcess()

我正在尝试在使用Embarcadero C++ Builder 2010 编写的程序中使用英特尔 MKL 库中的一些函数。我遇到了一些奇怪的行为,即调用任何一种 MKL 方法都会静默终止应用程序。事实证明,TerminateProcess()当调用任何方法时,库正在调用。我在找到应用程序终止的确切位置时遇到了一些麻烦,因为每次进入 MKL 方法并在 CPU 视图中逐条指令跟踪都会调用TerminateProcess不同位置的方法。

我的猜测是这是库捕获的错误情况。 据我所知,它是从 MKL 库中调用的,而不是从 RTL 的任何其他部分或外部错误例程或其他任何地方调用的。

什么可能导致这种情况?有没有人成功地将 MKL 与 C++Builder 程序一起使用?

症状

我有以下代码,基于二维 FFT(C 接口)示例:

当调用DftiCreateDescriptor. 因此,为了进行调查,我踏入了功能并走过了大会。它跳转到MKL_RT.DftiCreateDescriptor_s_md,然后我可以翻阅十页或更多页的程序集。在某些时候,它call的地址会变成TerminateProcess. 但是,它执行此操作的点感觉是随机的。例如,在某一时刻,我将它缩小到一个调用语句和地址,只是在我下次运行程序时它崩溃了。 编辑:ExitProcess自从我第一次问这个问题以来,我在, TerminateProcess,等处放置了断点TerminateThread,发现它正在调用TerminateProcess. (最初我不知道它为什么会无声地终止。)它这样做的点仍然在变化。没有有用的调用堆栈(这是测试程序,来源如下):

(这两个 MKL_RT.dll 行,在 CPU 视图中检查时,似乎没有使用正确的方法。这可能是因为它是发布代码并且调试器没有正确跟踪调用堆栈......或者它可能与问题有关。)

我也用其他几种 MKL 方法重现了这一点。使用FFTW3 兼容接口,有时会出现调用fftwf_malloc(有时不会),调用时总是出现fftwf_plan_dft_2d

更多细节

  • 我正在使用最新版本,2013 SP1。我只安装了 IA32 组件(因为 CB2010 是一个仅限 3​​2 位的编译器。)
  • 我正在使用单 DLL 链接选项进行链接,链接到mkl_rt.dll.
  • 但是,由于 mkl_rt.lib 是一个 COFF 文件,我使用 .lib 生成了一个新的 .lib implib -a mkl_rt.lib mkl_rt.dll。它创建了一个看起来不错的库,尽管警告了数百个重复符号。
  • 下面的评论者 greatwolf 建议了一个不同的implib命令implib -a -c mkl_rt.lib mkl_rt.dll,来保留方法名称的大小写。这导致的重复名称警告要少得多,但不会链接:[ILINK32 Error] Fatal: Exceeded memory limit for block Import symbols in module _vsrnggumbel
  • 我还尝试动态加载库和函数,以防 .lib 文件、方法原型等出现问题(例如,加载并直接DftiCreateDescriptor_s_md从 DLL 调用)。行为没有改变。
  • DLL的C 接口使用cdecl调用约定,这是项目选项设置为默认使用的内容,并单步执行方法的调用代码,我看到所有参数都被压入堆栈。每个函数似乎都被正确调用。
  • 将我的动态加载原型更改为stdcall(即使它应该找到cdecl版本)也会导致同样的问题 - 但值得检查。DLL mkl_rt.dll 主要只支持cdecl版本。
  • IDE 未设置为忽略任何异常。在 Tools > Options > Debugger Options > Embarcadero Debuggers > Native OS Exceptions 部分中,所有异常都设置为由调试器处理。

复制

这是一个简单的命令行 C 程序,足以演示崩溃:

IDE 用来构建它的 BCB 命令行是:

c:\program files (x86)\embarcadero\rad studio\7.0\bin\bcc32.exe -D_DEBUG -D_RTLDLL;_NO_VCL -I"..." -y -Q -k -r- -c -tWC -C8 - oDebug\mkltest.obj -w-par -Od -v -vi- -H=Debug\MKLTest.pch -H mkltest.c

和链接:

c:\program files (x86)\embarcadero\rad studio\7.0\bin\ilink32.exe -LDebug;"...";"..." -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\ MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,

我省略了大量的包含路径。为了完整起见,整行是:

c:\program files (x86)\embarcadero\rad studio\7.0\bin\bcc32.exe -D_DEBUG -D_RTLDLL;_NO_VCL -I"C:\Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\ projects\Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\include\boost_1_39\boost\tr1\tr1";"c:\program files (x86)\ embarcadero\rad studio\7.0\include";"c:\program files (x86)\embarcadero\rad studio\7.0\include\dinkumware";"c:\program files (x86)\embarcadero\rad studio\7.0\include \vcl";"C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\include\boost_1_39";"c:\program files (x86)\embarcadero\rad studio\7.0\include";"c:\程序文件 (x86)\embarcadero\rad studio\7.0\include\vcl";"c:\program files (x86)\embarcadero\rad studio\7.0\ObjRepos\Cpp";"c:\program files (x86)\embarcadero\rad studio\7.0\include\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Common ";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Source";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Delphi";"c :\program files (x86)\embarcadero\rad studio\7.0\include\boost_1_39";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\程序文件 (x86)\embarcadero\rad studio\7.0\Toolbar2000\SpTBXLib\Source";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86 )\TMS 高级多边形列表";"C:\Program Files (x86)\TMS 高级多边形列表\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\Abbrevia\source" -y -Q -k -r- -c -tWC -C8 -oDebug\mkltest.obj -w-par -Od -v -vi- -H=Debug\MKLTest.pch -H mkltest.c

和链接:

c:\program files (x86)\embarcadero\rad studio\7.0\bin\ilink32.exe -LDebug;"c:\program files (x86)\embarcadero\rad studio\7.0\lib\debug";"C:\ Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\projects\Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"c:\program files (x86)\embarcadero\rad studio\7.0\lib";" c:\program files (x86)\embarcadero\rad studio\7.0\lib\obj";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"C:\Program Files ( x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\ psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";" C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\ DCP" -jDebug;"c:\program files (x86)\embarcadero\rad studio\7.0\lib\debug";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\projects\ Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\obj ";"c:\程序文件 (x86)\embarcadero\rad studio\7.0\lib\psdk";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\ 7.0\lib\psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\ Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files ( x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero \rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files ( x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest .map , import32.lib cw32i.lib , ,\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero \rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files ( x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest .map , import32.lib cw32i.lib , ,\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86) \embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS高级多边形列表";"C:\Program Files (x86)\TMS 高级多边形列表\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents \RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86) \embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS高级多边形列表";"C:\Program Files (x86)\TMS 高级多边形列表\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents \RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";" C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\ DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";" C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\ DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,-lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,-lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,

最后说明:我刚刚添加了 [delphi] 标签,因为它使用相同的 RTL,以防万一。我正在使用 RAD Studio 2010,它包括 C++ Builder 和 Delphi。我将 MKL 放入的主要应用程序是用两种语言编写的。上面的测试应用程序是纯 C 的。

0 投票
1 回答
541 浏览

c++builder - 完成的 Execute() 函数是否设置了 Terminated 属性

由于 C++ Builder 2010 似乎不包含我自己添加到线程中的CheckTerminated()函数,因此我需要从线程外部检查其状态。TThread

这工作正常,但我正在尝试查找有关是否让Exectue()线程完成的功能将Terminated属性设置为的信息,true或者我是否必须在Execute()方法结束时手动执行此操作,或者Terminate()在结束时运行Execute()方法。

0 投票
1 回答
3779 浏览

openssl - 无法连接到 Indy SSL TCP 服务器

我正在尝试构建通过 Indy SSL TCP 组件(C++ Builder 2010)进行通信的服务器和客户端应用程序。我已经使用以下命令生成了证书和私钥:

服务器代码:

客户端代码:

通讯.h

服务器启动没有任何错误。当我尝试连接到服务器时,客户端抛出异常

Connection Closed Gracefully.并且服务器在每次迭代时都会进入无限循环。我使用 OpenSSL 库 v.1.0.1.3 在 Windows 7 上运行测试。请帮助使其工作。

0 投票
1 回答
1305 浏览

c++ - 每次在c ++ builder中移动鼠标时绘制新线

每次移动鼠标光标时,我都有一个要加载的代码;它画线到鼠标的方向和超越,每次线到达某个x坐标时,线就会反射。问题是现在程序只在我单击 PaintBox 时画线。到目前为止,这是我的代码:

0 投票
1 回答
1841 浏览

c++ - 如何在 C++ Builder 2010 中进行双缓冲?

我有一个连续画线的代码。问题是每次刷新表单时线条都会闪烁。我听说我应该使用双缓冲,但是怎么做呢?我正在使用 c++ builder 2010。这是我的代码:

0 投票
1 回答
320 浏览

registry - 在 64 位操作系统上找不到 32 位应用程序的注册表项

我有一个在 C++ Builder 2010 中构建的应用程序。一些配置值存储在注册表中,作为 32 位应用程序,一些值保存在Wow6432Node键下。

无论我是在 WinXP、Win7、Win8... 32 位还是 64 位上运行应用程序,这都像发条一样工作。该应用程序由 TeamCity 下的 Windows 7 64 位构建代理构建。

然后突然间它就停止了工作。没有对代码加载注册表项进行任何更改。在四处挖掘之后,我通过强制注册表对象的访问KEY_WOW64_32KEY来使其工作。

但这似乎很麻烦,必须在任何地方做。首先尝试读取,如果没有找到值,请尝试签入键。自上次工作以来,我已经查看了所有代码更改,并且没有任何内容涉及注册表加载,如果某些奇怪的设置被错误地启用但没有好处,我尝试恢复.cbproj文件。

此外,在也是 Win 7 64 位机器的开发机器上本地构建它可以正常工作。

到底会发生什么?这就像魔术:)

0 投票
1 回答
870 浏览

snmp - 使用 Indy 组件实现 SNMP SendTrap

我需要通过 SNMP 从我的 C++Builder 上的应用程序报告错误。

我开始使用 Indy 组件实现 SNMP SendTrap。

但是当我运行应用程序时,我的系统中没有 udp 活动。当我运行这样的事情时

wireshark 显示 192.168.100.21 192.168.100.19 SNMP 82 获取请求 1.3.6.1.2.1.1.3.0

但是当idSnmp->SendTrap()wireshark什么都看不到时(在这两种情况下,wireshark的过滤器都是UDP portrange 161-162)

我很高兴看到一些关于我的代码的评论,或者可能是 SendTrap 的工作示例 :)

0 投票
1 回答
1033 浏览

c++builder - 资源编译错误(源输入中的错误字符)

我在项目中添加了包含以下内容的文本文件:

在同一个文件夹中还有MyApplication.manifest一个 XML 文件 - 这个: C++ Builder / Delphi 2010 application manifest template

在我尝试从 RC 构建资源后,我收到错误 - 源输入中的错误字符 (1)

任何想法为什么?

RT_MANIFEST值是 24,但我不确定 1 应该是什么。

0 投票
1 回答
2955 浏览

c++ - C++ 断点被忽略/错过

我正在尝试运行一些有人给我的 C++ 代码。起初有一个istream文件的链接断开,我通过添加包含路径来修复它:

代码现在可以编译,但它不会在任何断点处停止,例如formcreate

它只是打开表单,就好像它是从.exe文件中运行的一样,除了它显示

正在编译 MyProject.cbproj(发布配置).... 成功

在消息栏中

我尝试从发布模式切换到调试模式,尝试更改输出目录以便编译新.obj文件。没有成功。

我正在运行Rad studio 2010,它最初是用 编写的XE5,但我认为这是文件夹结构而不是 IDE 版本的问题?

有什么建议么?

0 投票
1 回答
694 浏览

delphi - 在 ComboBox DrawItem 事件中从 TImageList 复制透明(32 位 alpha)位图

我正在自定义 OnDrawItem 事件以在项目名称旁边绘制图标。到目前为止,这是事件 OnDrawItem 的代码:

问题当然是让透明TImageList1复制到透明TBitmap保留 32 位 alpha 透明度/半透明度。目前我在结果中用白色背景把它弄出来TBitmap

需要明确的TImageList ColorDepth是,在将图像加载到它之前设置为cd32bitwithDrawingStyle = dsTransparent并且上面的图像是透明的,没有问题。

解决这个问题的诀窍是什么?

更新和我的最终解决方案

根据此处的回复,这是我为将来可能需要它的其他人提供的最终工作代码。这当然只是一个模板代码,您可能希望根据自己的需要进一步定制。