我正在尝试配置FASTMM4,Builder C++ 6我遵循的步骤是:
Project -> Options -> Linker我取消勾选了"Use Dynamic RTL"。C:/tools/FASTMM并将FASTMM4.pas文件添加到我的测试 C++ VCL 项目中。FastMM4.hpp在 FastMM 文件夹中获得一个新文件。FastMM4BCB.cpp在我的项目中,并写#include <FASTMM4.hpp>在顶部。FastMM_FullDebugMode.dll并FastMM_FullDebugMode.lib移动FastMM_FullDebugMode.dll到安装目录Bin中的文件夹Builder C++。{$define FullDebugMode}启用来自 的线路FastMM4Options.inc。我错过了什么吗?为什么我会出现以下错误?

我需要s在程序中经常读取字符串的长度.我设置了s一次字符串,所以我可以在变量(NoOfChars)中记住它的大小,如下所示:
type
MyClass= class
Public
s: string;
NoOfchars: integer;
end;
procedure MyClass.SetS(const MyString: String);
begin
s:= MyString;
NoOfchars := Length(s); // <-- store it once, read it often
end;
Run Code Online (Sandbox Code Playgroud)
我想我读到的地方Length(s)和读取常量一样快,因为它只访问存储在字符串前面"hidden"字段中的字符串的长度.这很有意义,但由于我们没有源代码,我们只能猜测.也许还有其他涉及的计算?
那么,我应该使用Length(s)还是应该记住变量中的长度?
我通过Mingw在Windows上编写了一个linux程序.但是,转换并不完美.例如,在Windows上输出是这样的(我得到'zu'而不是实数):
Approximated minimal memory consumption:
Sequence : zuM
Buffer : 1 X zuM = zuM
Table : 1 X zuM = zuM
Miscellaneous : zuM
Total : zuM
Run Code Online (Sandbox Code Playgroud)
事实证明,Mingw不支持%zu,但它提供了一种解决方法.在他们的网站上,他们说:
由于您使用的是Microsoft的实现,因此无法使用.在包含stdio.h之前,直接使用mingw_printf或将USE_MINGW_ANSI_STDIO定义为1.
所以,我在我的程序中进行了搜索,我发现cdhit-common.h是唯一一个有#include行的文件.所以,我在该行上方定义了USE_MINGW_ANSI_STDIO并编译:
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#define USE_MINGW_ANSI_STDIO 1
#include<stdio.h>
...
Run Code Online (Sandbox Code Playgroud)
它编译但程序仍然输出'zu'而不是数字.我做的不错吗?为什么没用?
注意:使用mingw时,使用USE_MINGW_ANSI_STDIO的解决方案适用于mingw64.我希望是适用于这两个平台.
因此,Delphi程序不支持DPI。直到最近,当我需要具有高DPI的计算机上的真实屏幕分辨率(“让屏幕上的内容变得更容易阅读”时,Screen.Width报告的错误分辨率为150%)时,这并没有给我带来多少麻烦。建议的一些建议是使应用程序具有高DPI感知能力(XML清单),但其他警告我们这涉及很多工作!因此,由于懒惰(或缺少时间),我想知道是否有技巧来计算实际分辨率。
我想到的一个非常肮脏的技巧是创建一个DPI感知的辅助工具(微型控制台应用程序)。然后,我要做的就是调用此工具并从中获取真正的分辨率。漂亮的斯巴达人,但它应该工作。无论如何,一定有更好的方法可以做到!
我正在尝试使用Browser.Navigate(URL)将网页加载到TWebBrowser中.但是,浏览器不会关心页面是否在线更新,所以只要我不重启程序就不会显示新页面.
一个更具体的例子:如果我导航到具有访问者计数器(作为图像)的网页,计数器将递增.如果我离开那个页面,然后我返回(不使用Back),计数器将不会递增.在Firefox中,它会增加.
这是我尝试过的,不会起作用:
const
DLCTL_PRAGMA_NO_CACHE = $00004000;
procedure TBrowserFrm.LoadURL(URL: string);
var
Flag: OleVariant;
begin
Flag:=DLCTL_PRAGMA_NO_CACHE;
Browser.Navigate(URL, Flag);
end;
procedure TBrowserFrm.LoadURL(URL: string);
var
Flags: OleVariant;
begin
Flags := 'navNoHistory, navNoReadFromCache, navNoWriteToCache';
Browser.navigate2(URL, Flags);
end;
Run Code Online (Sandbox Code Playgroud)
有关如何使TWebBrowser加载真实页面的任何想法?
我需要处理一个来自旧Mac时代的文件(旧摩托罗拉CPU).字节是大端,所以我有一个函数交换和Int64到英特尔小端.该函数是ASM,适用于32位CPU但不适用于64位.对于64位,我有一个不同于ASM的不同功能.我想用IFDEF组合这些功能.我可以这样做吗?会有问题吗?
interface
function SwapInt64(Value: Int64): Int64; assembler;
implementation
{$IFDEF CPUx86}
function SwapInt64(Value: Int64): Int64; assembler; { Does not work on 64 bit } {
asm
MOV EDX,[DWORD PTR EBP + 12]
MOV EAX,[DWORD PTR EBP + 8]
BSWAP EAX
XCHG EAX,EDX
BSWAP EAX
end;
{$else}
function SwapInt64 (Value: Int64): Int64;
var P: PInteger;
begin
Result: = (Value shl 32) or (Value shr 32);
P: = @Result;
P ^: = (Swap (P ^) shl 16) or (Swap (P ^ shr 16)); …Run Code Online (Sandbox Code Playgroud) 的结果GetParent('c:\1\2\')是'c:\1\2'。
的结果GetParent('c:\1\2')是'c:\1'。
这是正常/预期的行为吗?如果是,其背后的逻辑是什么?
我总是被TMemo(和其他类似控件)只有OnChange事件的事实所困扰.我想知道USER何时更改了文本,而不是以编程方式更改文本.
我知道两种方法来区分用户更改的文本和以编程方式更改的文本:
有一种更优雅的方式吗?
我观察到在调用 TDirectory.Delete(x) 后立即调用 DirectoryExists(x) 返回 true,如果要删除的文件夹中的文件很少并且文件夹处于打开状态(在 Total Commander 中)。
换句话说:
begin
TDirectory.Delete('x', true); <-- 'Delete' exited but the folder is still not fully deleted
if SysUtils.DirectoryExists('x')... <-- This returns true
end;
Run Code Online (Sandbox Code Playgroud)
这是正常行为吗?
“解决方案”是这样的:
begin
TDirectory.Delete('x', true);
Sleep(1000); //wait for Delete to finish
if SysUtils.DirectoryExists('x')...
end;
Run Code Online (Sandbox Code Playgroud)
问题:我如何知道 Delete 何时准备就绪(如何消除睡眠)?
注意:Total Commander 不会阻止文件夹的删除(我猜),因为文件夹无论如何都会被删除(一段时间后)。
我想画一些东西.因为GUI冻结我想在一个线程中绘制.但有时我想暂停绘图(几分钟).
Delphi的文档说暂停/恢复已经过时,但没有说明哪些功能取代了它们.
不推荐使用Suspend和Resume.Sleep和SpinWait显然是不合适的.令人惊讶的是,德尔福没有提供这样的基本属性/功能.
那么,我如何暂停/恢复一个线程?
delphi ×8
c++ ×2
delphi-xe ×2
delphi-xe7 ×2
assembly ×1
bitmap ×1
c++builder ×1
dpi ×1
fastmm ×1
gcc ×1
linux ×1
mingw ×1
pascal ×1
resolution ×1
twebbrowser ×1