标签: jvcl

Delphi:是否应该创建一个"未暂停"的线程?

我一直试图追踪Jedi VCL中的内存泄漏JvHidControllerClass.pas,我在源历史中遇到了这种变化:

旧版本:

constructor TJvHidDeviceReadThread.CtlCreate(const Dev: TJvHidDevice);
begin
  inherited Create(True);
  Device := Dev;
  NumBytesRead := 0;
  SetLength(Report, Dev.Caps.InputReportByteLength);
end;
Run Code Online (Sandbox Code Playgroud)

目前的修订:

constructor TJvHidDeviceReadThread.CtlCreate(const Dev: TJvHidDevice);
begin
  inherited Create(False);
  Device := Dev;
  NumBytesRead := 0;
  SetLength(Report, Dev.Caps.InputReportByteLength);
end;
Run Code Online (Sandbox Code Playgroud)

根据经验,我发现如果你创建一个挂起的线程:

inherited Create(False);
Run Code Online (Sandbox Code Playgroud)

然后线程立即开始运行.在这种情况下,它将尝试访问尚未初始化的对象:

procedure TJvHidDeviceReadThread.Execute;
begin
   while not Terminated do
   begin
     FillChar(Report[0], Device.Caps.InputReportByteLength, #0);
     if Device.ReadFileEx(Report[0], Device.Caps.InputReportByteLength, @DummyReadCompletion) then
Run Code Online (Sandbox Code Playgroud)

马上尝试填充Report,并访问该对象Device.问题是它们尚未初始化; 这些是线程启动后的下一行:

  Device := Dev;
  NumBytesRead := 0;
  SetLength(Report, Dev.Caps.InputReportByteLength);
Run Code Online (Sandbox Code Playgroud)

我意识到这是一种竞争条件; 用户在生产中遇到崩溃的可能性非常低,因此离开竞赛失败可能是无害的.

但我离开了吗?我错过了什么吗?打电话:

BeginThread(nil, …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading delphi-5 jvcl

9
推荐指数
1
解决办法
1692
查看次数

JVCL安装Delphi XE7

我最近安装了Delphi XE7并且一直在添加我的第三方组件集.我的开发机器上也有Delphi 7,XE4和XE6.运行JVCL 3.48安装时,我可以选择安装或更新7,XE 4和XE 6但不是XE 7.我需要做什么才能拿到这个版本?

非常感激

delphi jvcl delphi-xe7

6
推荐指数
2
解决办法
1万
查看次数

在64位应用程序中使用SetupAPI枚举USB HID设备

我正在使用Delphi XE2并尝试将我们的usb通信dll升级到64位.我们正在使用JVCL SetupAPI和Hid单元.所有工作完全使用32位编译器,可以看到我附加的HID设备.我切换到64位,我再也看不到任何我知道的HID设备了.

我遇到有人提到需要以64位不同的方式调整某些数据结构的大小(请参阅https://forums.embarcadero.com/thread.jspa?messageID=408473#408473),这有所帮助但我现在正式难倒.

目前我的代码返回从SetupDiGetDeviceInterfaceDetail函数读取的0字节.注释掉的SizeOf()适用于32位但不适用于64位.

任何帮助将非常感激.

repeat
  TmpDeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
  TmpDeviceInterfaceData.cbSize := 32;  // SizeOf(TmpDeviceInterfaceData);
  TmpSuccess := SetupDiEnumDeviceInterfaces(TmpDevInfo, nil, TmpDevHidGuid, TmpDevn, TmpDeviceInterfaceData);
  if TmpSuccess then
  begin
    TmpDevData.cbSize := 32; //SizeOf(TmpDevData);
    showmessage(inttostr(tmpdevdata.cbsize));
    TmpBytesReturned := 0;
    SetupDiGetDeviceInterfaceDetail(TmpDevInfo, @TmpDeviceInterfaceData, nil, 0, TmpBytesReturned, @TmpDevData);
    showmessage('bytes returned = ' + inttostr(TmpBytesReturned));
    if (TmpBytesReturned <> 0) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
    begin
      // showmessage('hello');
      TmpFunctionClassDeviceData := AllocMem(TmpBytesReturned);
      TmpFunctionClassDeviceData.cbSize := sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);

      TmpFunctionClassDeviceData.cbSize := 8;
      // showmessage(inttostr(TmpFunctionClassDeviceData.cbSize));
      if SetupDiGetDeviceInterfaceDetail(TmpDevInfo, @TmpDeviceInterfaceData, TmpFunctionClassDeviceData, TmpBytesReturned, TmpBytesReturned, @TmpDevData) then
      begin …
Run Code Online (Sandbox Code Playgroud)

delphi usb 64-bit hid jvcl

5
推荐指数
1
解决办法
3790
查看次数

编译包后,我在哪里找到bpl文件?

我想创建*.bpl文件,但我没有这样做.
具体来说,我正在尝试制作JEDI插件,但我也试过了一个空的纯Delphi包.

如果我在Delphi XE3中创建一个新包,我得到一个空单元 - 如果我"制作"这个名为"Package1.bpl"的项目,我在"debug/win32 /"中得到一个.dcu文件,但是没有.bpl文件.
编译器未报告错误.

空的JEDI插件(bpl样式)也只提供.dcu,而空的dll风格的JEDI插件在"debug/win32 /"中提供.cdu .dll文件.

这是我第一次尝试制作新包装,所以我完全迷失了.
我错过了什么?

老王

delphi package jedi jvcl delphi-xe3

5
推荐指数
1
解决办法
8347
查看次数

安装JVCL时出错

我已通过Install.bat 安装JCL并成功安装.但是,当我尝试通过install.bat 安装JVCL时,我收到如下错误消息:

[Compiling installer...]
Using Embarcadero RAD Studio XE

Embarcadero Delphi for Win32 compiler version 22.0
Copyright (c) 1983,2010 Embarcadero Technologies, Inc.
C:\Program Files (x86)\Embarcadero\Components\JVCL347CompleteJCL241-Build4571\jv
cl\devtools\PackagesGenerator\GenerateDefines.pFatal: F1026 File not found: 'Sys
tem.Types.dcu'

Failed to compile JVCL installer

Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

谁知道这里有什么问题?

提前致谢.

delphi jvcl delphi-xe jedi-code-library

5
推荐指数
1
解决办法
2763
查看次数

由于jcl要求,jcvl无法正常工作

我正在尝试手动安装JCLjvcldelphi xe2.

我按照指示安装了JCL,似乎安装没有问题.现在我尝试加载JVCL包16,它打开delphi并开始加载libarys,当它到达Jedi代码库MPL1.1时,我开始得到如下错误

Error reading form frmJucolorProviderDesigner
-class tjvcontextprovider not found

Ingnore Cancel Ingnore all
Run Code Online (Sandbox Code Playgroud)

这不是唯一一个我会得到一些不好的帖子,如果它有帮助的话

Error reading form JvStandardActions
 -tjvSendMailAction not found
 -tjvwebaction not found
Error reading form jvCheckItemsEditor
 -tjvCheckListBox not found
Error reading form JvControlActoinsDM
 -tjvControlcollapseAction not found
 -TjvControlexpandAction not found
 -TjvControlExportAction not found
 -tjvControlOptimizeColumnsAction not found
 -TjvControlCustomizeColumnsAction not found
 -TjvControlPrintAction not found
Error reading form jvSpeedBarEditorMain
 -jvFormStorage not found
 -AppRegistryStorage not found
Run Code Online (Sandbox Code Playgroud)

等......如果你需要,我可以加上休息.

但每个 - 都是自己的对话框,[忽略] [取消] [忽略全部]

现在,在我按下忽略50次后,它将最终加载项目,当我尝试为JVCl包构建所有项目时,它说找不到所需的包jcl.

在库路径我有

..jcl\source\common
..jcl\source\windows
..jcl\source\include …
Run Code Online (Sandbox Code Playgroud)

delphi jvcl jedi-code-library delphi-xe2

5
推荐指数
1
解决办法
1621
查看次数

是否有建议的路径为Delphi XE5安装JEDI和JVCL?

我看到JCL和JVCL现在在GitHub中,我之前使用内置安装程序在XE3下安装了它们.我还使用了Embarcadero页面上发布的XE4'special' .

有人设法让JCL和JVCL与XE5合作吗?

delphi jvcl jedi-code-library delphi-xe5

5
推荐指数
1
解决办法
5790
查看次数

JVCL组件文档

我刚刚安装了JCL和JVCL库,主要是因为它们包含替换旧的rxLib组件的组件,而且我正在升级一个大量使用这些组件的旧项目.

我现在发现自己在Delphi 2010 IDE中有很多新标签,但没有提示(除了组件名称)这些组件的功能.TJvEdit与TEdit有何不同?什么是TJvSpecialImage?

对JVCL帮助目录和谷歌搜索的检查甚至找不到库中包含的组件列表.有谁知道这样的文件是否存在?

编辑,后续问题:

既然Lars告诉我从哪里下载帮助文件,我就无法在Delphi帮助系统中安装它们.显然,我应该使用Delphi提供的h2reg实用程序来应用这些文件(我假设使用JVCL333_h2reg.ini文件来驱动这个过程),但我能找到的唯一提示就是强调腐败的危险.帮助系统做错了.

(注意:我也在本机上安装了D2007,但只想在D2010中安装帮助文件).

delphi jvcl

3
推荐指数
1
解决办法
3317
查看次数

使用TJvPluginManager获得返回值的最佳方法

我目前正在一个简单的程序中使用dll库实现插件(使用JVCL框架中的TJvPluginManager).

到目前为止,我弄清楚如何使用这个组件来处理命令,但如果我想从库中的自定义函数获得返回值,该怎么办?通过使用TJvPluginManager从主机调用某个函数是否可行?我该如何实现呢?

洞的想法是有一个函数在每个dll中返回一个字符串,因此可以使用一个简单的cicle调用它.我想我可以手动完成这个(使用dinamic加载)但我想尽可能多地使用TJvPluginManager.

感谢您的时间.约翰马可

delphi plugins jvcl

3
推荐指数
1
解决办法
307
查看次数

将 JVCL 安装到 Delphi 10 西雅图

当尝试使用 GetIt 包管理器将 JCL 和 JVCL 安装到 Delphi 10 Seattle 中时,出现错误:

“Windows 7 专业服务包 1 (6.1.7601)

JVCL 3.50.0.0

[生成:软件包] 为 D15 生成软件包 Loaded template.dpk Loaded template.dproj Loaded template.rc [编译:Packages] [编译:JvCore150.bpl] Embarcadero Delphi for Win32 编译器版本 22.0 版权所有 (c) 1983,2010 Embarcadero Technologies, Inc. C:\Users\Lars\Documents\Embarcadero\Studio\17.0\CatalogRepository\JEDIVisualComponentLibraryJVCL-3.49\Common\jvcl.inc(26) 致命:F1026 未找到文件:'jedi\jedi.inc' ”

JCL 版本为 2.8.0,可通过 GetIt Package Manager 获取

这个问题与Error in JCL Installation有一些相似之处

delphi jvcl delphi-10-seattle

3
推荐指数
1
解决办法
1万
查看次数

在背景中运行功能时,将表单作为叠加层加载

当我调用一个函数并且它"运行"时(可能需要3秒钟 - 刷新函数从api服务器获取数据)我想将一个加载形式显示为Ajax加载指示器作为主窗体上方的叠加层.

我以前的尝试都失败了.我曾尝试更改在创建Main之后直接显示的Create the LoadingForm.然后我尝试了LoadingForm.Show/Showmodal.在模态序列中停止并且仅在我关闭表单时继续并且显示尽管窗口不关闭.

我也有这样的情况,表格打开但gif没有显示,应该是的地方只是白色并保持白色 - 没有图像没有动画

在此输入图像描述

任何想法?

delphi vcl jvcl

2
推荐指数
1
解决办法
1966
查看次数

JVCL安装

我在Windows 8.1上安装了Delphi 2007.我已经安装了JCL没有问题.但是当我尝试安装JVCL时,我遇到以下错误:

JVCL 3.48.0.0


[Generating: Packages]
Generating packages for D11
    Loaded template.dpk
    Loaded template.dproj
    Loaded template.rc
[Compiling: Packages]
[Compiling: JvCore110.bpl]
CodeGear Delphi for Win32 compiler version 18.5
Copyright (c) 1983,2007 CodeGear


D:\Jvcl\run\JvAppIniStorage.pas(277) Error: E2361 Cannot access private
symbol TMemIniFile.FSections
D:\Jvcl\run\JvAppIniStorage.pas(277) Warning: W1023 Comparing signed
and unsigned types - widened both operands
D:\Jvcl\run\JvAppIniStorage.pas(285) Error: E2361 Cannot access private
symbol TMemIniFile.FSections
D:\Jvcl\run\JvAppIniStorage.pas(288) Error: E2361 Cannot access private
symbol TMemIniFile.FSections
D:\Jvcl\run\JvAppIniStorage.pas(288) Error: E2029 'END' expected but
')' found
D:\Jvcl\run\JvAppIniStorage.pas(291) Error: E2029 ';' …
Run Code Online (Sandbox Code Playgroud)

delphi jvcl

1
推荐指数
1
解决办法
1294
查看次数