问题标签 [c++builder-10.1-berlin]
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# - 如何将 C++ 类转换为 .NET 对象?
我们有一个 C# 程序员想要一个 .NET 对象来完成所有底层工作。它基本上应该是一个带有功能和事件的黑匣子。
我已经用 C++ Builder 编写了所有这些,使用非可视 VCL 类,现在看来我必须用它制作一个 .NET 对象。
我需要一个简单的例子来说明如何创建一个带有一个函数和一个事件处理程序的 .NET “盒子”,然后我应该能够从那里实现它的其余部分。我应该在 COM 对象中执行此操作吗?我应该使用什么技术?
示例 C++ 端。
我已经删除了所有内部的东西,只留下了应该可以从 C# 访问的公开函数、事件和属性。
从这个类中,我需要创建一个这样的 .NET 对象:
我还需要 C# 将函数连接到 C++ 类中的事件处理程序。
这些事件处理程序在 C++ 类中调用以触发如下事件:
还有一些属性,但是这些很容易在 COM 接口中实现(如果这是我们需要的话)......
由于这是用 C++ Builder 编写的,并且 C++ builder 可以编写组件(对于 C++ Builder 和 Delphi,使用 ActiveX 技术),也许可以将 C++ Builder 组件库转换为 .Net 对象/组件?
编辑:为了更清楚......
MyLib.IDevice.Connect() 是我希望 C# 看到的...函数列表是 C++ 函数,就像在带有接口 IDevice 的 .Net 对象 MyLib 中一样。
所以假设我已经创建了一个 MyLib.IDevice 的实例作为设备,我可以调用 Device.Connect(); 来自 C#。
eventhandler - 使用非类成员作为事件处理程序
我正在为 C++Builder VCL 类编写一个 DLL 包装器。这是一个极其简化的问题示例:
...这是问题所在:
通常myEventHandler
在另一个类中定义,但在这里它被定义为全局函数。当我尝试分配myEventHandler
给myClass.OnMyEvent
我时出现错误
无法将 void(int) 转换为 TMyEvent
我重用TMyClass
来生成不同类型的包装器并且需要__closeure
intypedef
以便它与 VCL 表单项目很好地配合。
是__closure
问题吗?我可以使用全局函数作为事件处理程序吗?
transparency - 迁移的 C++ Builder 项目失去 Imagelist 透明度
我从 C++ Builder XE7 升级到 C++ Builder Berlin,我有一个项目,在 6 个 ImageList 控件中包含大约 100 个图像。
在 XE7 中,透明度工作正常,但升级后所有图像现在都有黑色纯色背景而不是透明度。
我仔细检查了 ImageList 的 ColorDepth 是否仍然是 cd32bit,确实如此。一切在 IDE 中看起来都是文件,图像是透明的,但是一旦我运行我的应用程序,所有图像都有黑色背景而不是透明度。
我尝试删除一个新的 TImageList,cd32 位深度,并添加了一些在 XE7 中运行良好的透明 PNG:s。它们在运行时仍然显示为黑色背景,但在 IDE 中却没有。
javascript - WebSocket 连接到 TIdHTTPServer,握手问题
我正在使用 C++Builder 10.1 Berlin 编写一个简单的 WebSocket 服务器应用程序,它在端口上侦听从 Web 浏览器(如 Google Chrome)发送的一些命令。
在我的表单上,我有一个 TMemo、TButton 和 TIdHTTPServer,并且我有以下代码:
在 Chrome 中,我执行以下 Javascript 代码:
但我从 Chrome 收到此错误:
VM77:1 WebSocket 连接到“ws://localhost:55555/”失败:一个或多个保留位打开:reserved1 = 1,reserved2 = 0,reserved3 = 0
我希望 WebSocket 连接成功,然后我可以在 Web 浏览器和我的服务器应用程序之间发送数据。
也许有人已经知道出了什么问题,并且可以展示如何实现这一目标的完整示例?
这是我的应用程序的 Memo1 显示的内容:
以下是 Chrome 显示的内容:
响应请求:
请求标头
c++ - c++编译器无法为类生成operator=
这段代码:
生成上述编译器错误(我使用的是 C++Builder 10.1 Berlin)。
如果我更改对UnicodeString
指针的引用,一切都会按预期工作。有谁知道为什么引用会产生错误?
顺便说一句,有没有一种更简单的方法DBIDs
可以让每个创建vector
的元素都可以使用,而不是一直传递指针/引用?static
会员不好,我确实看过模板表达式,但无法得到可接受的答案。
android - 释放带有选定标记的表单会使应用程序崩溃(MapView)
如果使用以下方法在 MapView 上选择了任何标记:
表单关闭后应用程序立即崩溃。
但是,如果使用这个:
应用程序不会崩溃,但在表单关闭后会触发访问冲突消息。这可能是什么原因造成的?有什么办法可以避免吗?
此致
c++ - BEGIN_MESSAGE_MAP 导致 C++ Builder 10.1 崩溃到桌面
我正在编写一个 VCL 组件 TGIcon 来模仿 Windows 桌面中的图标,它一直运行良好,直到我决定将 MouseEnter 和 MouseLeave 事件添加到组件中。我遵循了来自Embarcadero 社区的指南
这是我的代码(标题):
每当我尝试将组件放在表单上时,IDE(C++ Builder Starter)都会崩溃到桌面。我已经追踪到问题的根源是“BEGIN_MESSAGE_MAP ...END_MESSAGE_MAP”部分。如果我注释掉该部分,则该组件可以正常工作。
我曾经在 C++Builder XE5 (Professional) 中使用相同的组件,但由于它归一家我不再合作的公司所有,所以我没有组件的二进制文件,所以我必须在这里重新编写它. 据我所知,我所做的与我在 XE5 中编写的完全一样,一个可以工作,但这个会使 IDE 崩溃,没有错误消息,没有访问冲突,只是简单的 CTD。
有人可以帮忙吗,我需要做些什么才能在 C++ Builder 10.1 (Berlin) Starter Edition 中完成这项工作吗?这是 C++Builder 的一个错误,还是在 Starter Edition 中无法完成的,只能在“付费”版本中完成?还是这种方法已经过时了?如果是这样,请告诉我“现代化的”C++ Builder 是如何做到的。
提前致谢。
c++ - C++ Builder 如何将控制台应用程序转换为 VCL 控制台应用程序?
背景
我有一个使用“控制台应用程序向导”创建的控制台应用程序,那时它是一个普通的 C++ 项目(没有 VCL 框架)。
现在我需要一些 VCL 类,并且需要将此项目转换为控制台 VCL 项目。
问题
仅仅添加 vcl.h 是不够的,还需要替换启动代码。控制台向导正在选择您创建新项目的启动代码,但现在我想迁移它并且找不到任何方法将项目更改为控制台 VCL。
c++ - How may I resolve a file containing 65k lines of code causing a [bcc32 Fatal Error] F1008 Out of memory error?
I'm using Embarcadero C++ Builder 10.1 Berlin Update 2.
I added one file to a project. I tried to build said project and the build failed and reported the following error:
[bcc32 Fatal Error] FileName.cpp(44329): F1008 Out of memory
I have been reading up on errors that can be found via Google and am only finding linker errors. My understanding is that this isn't a linker error as I'm not seeing [ilink32]
. I haven't come across any examples of this error.
The file I added has 25 lines in the h
file and 64865 lines in the cpp
file. The following method takes up 64755 lines of the cpp
file.
This wasn't an issue before I added the file containing 65k lines of code to the project so I believe the appropriate question is, how may I resolve a file containing 65k lines of code causing a [bss32 Fatal Error] F1008 Out of memory error?