问题标签 [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.
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 是一个仅限 32 位的编译器。)
- 我正在使用单 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 的。
c++builder - 完成的 Execute() 函数是否设置了 Terminated 属性
由于 C++ Builder 2010 似乎不包含我自己添加到线程中的CheckTerminated()
函数,因此我需要从线程外部检查其状态。TThread
这工作正常,但我正在尝试查找有关是否让Exectue()
线程完成的功能将Terminated
属性设置为的信息,true
或者我是否必须在Execute()
方法结束时手动执行此操作,或者Terminate()
在结束时运行Execute()
方法。
openssl - 无法连接到 Indy SSL TCP 服务器
我正在尝试构建通过 Indy SSL TCP 组件(C++ Builder 2010)进行通信的服务器和客户端应用程序。我已经使用以下命令生成了证书和私钥:
服务器代码:
客户端代码:
通讯.h
服务器启动没有任何错误。当我尝试连接到服务器时,客户端抛出异常
Connection Closed Gracefully.
并且服务器在每次迭代时都会进入无限循环。我使用 OpenSSL 库 v.1.0.1.3 在 Windows 7 上运行测试。请帮助使其工作。
c++ - 每次在c ++ builder中移动鼠标时绘制新线
每次移动鼠标光标时,我都有一个要加载的代码;它画线到鼠标的方向和超越,每次线到达某个x坐标时,线就会反射。问题是现在程序只在我单击 PaintBox 时画线。到目前为止,这是我的代码:
c++ - 如何在 C++ Builder 2010 中进行双缓冲?
我有一个连续画线的代码。问题是每次刷新表单时线条都会闪烁。我听说我应该使用双缓冲,但是怎么做呢?我正在使用 c++ builder 2010。这是我的代码:
registry - 在 64 位操作系统上找不到 32 位应用程序的注册表项
我有一个在 C++ Builder 2010 中构建的应用程序。一些配置值存储在注册表中,作为 32 位应用程序,一些值保存在Wow6432Node键下。
无论我是在 WinXP、Win7、Win8... 32 位还是 64 位上运行应用程序,这都像发条一样工作。该应用程序由 TeamCity 下的 Windows 7 64 位构建代理构建。
然后突然间它就停止了工作。没有对代码加载注册表项进行任何更改。在四处挖掘之后,我通过强制注册表对象的访问为KEY_WOW64_32KEY来使其工作。
但这似乎很麻烦,必须在任何地方做。首先尝试读取,如果没有找到值,请尝试签入哇键。自上次工作以来,我已经查看了所有代码更改,并且没有任何内容涉及注册表加载,如果某些奇怪的设置被错误地启用但没有好处,我尝试恢复.cbproj文件。
此外,在也是 Win 7 64 位机器的开发机器上本地构建它可以正常工作。
到底会发生什么?这就像魔术:)
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 的工作示例 :)
c++builder - 资源编译错误(源输入中的错误字符)
我在项目中添加了包含以下内容的文本文件:
在同一个文件夹中还有MyApplication.manifest
一个 XML 文件 - 这个:
C++ Builder / Delphi 2010 application manifest template
在我尝试从 RC 构建资源后,我收到错误 - 源输入中的错误字符 (1)
任何想法为什么?
RT_MANIFEST
值是 24,但我不确定 1 应该是什么。
c++ - C++ 断点被忽略/错过
我正在尝试运行一些有人给我的 C++ 代码。起初有一个istream
文件的链接断开,我通过添加包含路径来修复它:
代码现在可以编译,但它不会在任何断点处停止,例如formcreate
:
它只是打开表单,就好像它是从.exe
文件中运行的一样,除了它显示
正在编译 MyProject.cbproj(发布配置).... 成功
在消息栏中
我尝试从发布模式切换到调试模式,尝试更改输出目录以便编译新.obj
文件。没有成功。
我正在运行Rad studio 2010
,它最初是用 编写的XE5
,但我认为这是文件夹结构而不是 IDE 版本的问题?
有什么建议么?
delphi - 在 ComboBox DrawItem 事件中从 TImageList 复制透明(32 位 alpha)位图
我正在自定义 OnDrawItem 事件以在项目名称旁边绘制图标。到目前为止,这是事件 OnDrawItem 的代码:
问题当然是让透明TImageList1
复制到透明TBitmap
保留 32 位 alpha 透明度/半透明度。目前我在结果中用白色背景把它弄出来TBitmap
。
需要明确的TImageList
ColorDepth
是,在将图像加载到它之前设置为cd32bit
withDrawingStyle = dsTransparent
并且上面的图像是透明的,没有问题。
解决这个问题的诀窍是什么?
更新和我的最终解决方案
根据此处的回复,这是我为将来可能需要它的其他人提供的最终工作代码。这当然只是一个模板代码,您可能希望根据自己的需要进一步定制。