小编Rod*_*ddy的帖子

如何使用Delphi中的当前语言环境格式化Integer

var i : integer;

i := 1234567;
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况,我希望字符串"1,234,567"作为输出(假设英国语言环境).IntToStr只给了我"1234567".我确定这是一个单行,但我找不到它......

delphi text-formatting

5
推荐指数
3
解决办法
7834
查看次数

创建不可修改的文件

我希望能够创建一个文件,将其分发给最终用户,但阻止他们对文件进行修改.

现在,显然,我实际上无法阻止任何人修改文件 - 所以我的方法是检测并拒绝文件,如果它被修改.

我的目的是生成文件内容的盐渍哈希并将其附加到文件中.在读取时,在读取文件的其余部分之前验证散列.这样做的缺点是我必须在读取文件的可执行文件中分发固定的"salt".显然我可以在某种程度上混淆它,但这仍然感觉像一个薄弱的环节.

有没有更好的方法来解决这类问题?

encryption hash protection

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

我可以在Delphi中使用字符串"IsEmpty"方法吗?

Embaracdero记录了字符串类型的"IsEmpty"方法,我已经成功地使用了C++ Builder代码.

WideString s;

if (s.IsEmpty())
   ....
Run Code Online (Sandbox Code Playgroud)

我从Delphi尝试了同样的东西,并且无法编译它:

var s: WideString;
begin
  if s.IsEmpty then
  ....
Run Code Online (Sandbox Code Playgroud)

我知道你可以用空字符串比较,或者调用Length函数,但是可以从Delphi调用这个IsEmpty方法吗?

编辑:只是为了澄清,这不是一个字符串与Widestring问题.

基本上,我链接到上面的文档描述了一个Pascal语法,以及一个C++语法,但这似乎不起作用.我认为这只是文档中的一个缺陷.

如果System :: WideString :: WideString为空,则返回true.

Pascal: function IsEmpty:bool;

delphi string

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

如何将Delphi TPageControl"tab index"转换为"page index"?

我正在使用TPageControl,其中某些页面不可见.

这打破了TabIndex和ActivePageIndex属性的正常1:1映射.

在大多数地方,我可以使用ActivePageIndex(或ActivePage本身)来获取当前页面,但我想要一个动态工具提示提示,这需要我确定哪个页面与特定选项卡索引相关联.

如果我调用pageControl.IndexOfTabAt(X,Y),我会得到一个Tab Index,但我不能直接使用它作为Pages []数组的索引,因为某些页面选项卡不可见.

我可以明确地遍历页面,忽略可见的页面,但感觉VCL中应该有一些东西已经为我做了这个......?

delphi tpagecontrol

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

为什么_CrtDumpMemoryLeaks在这里报告内存泄漏?

我想在DEBUG模式下检查内存泄漏.我使用Windows,并且,为了完成这项工作,函数_CrtDumpMemoryLeaks.

现在,为什么这段代码发现内存泄漏?

#include <Windows.h>
#include <iostream>

int main()
{
    if(_CrtDumpMemoryLeaks() == TRUE)
        std::cerr << "MEMORY LEAK!" << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我添加此代码以直接输出到控制台:

_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述

c++ memory-leaks visual-studio-2012

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

使用C++ Builder将COM对象延迟绑定

我们正在与C++ Builder 2010应用程序中的某些第三方COM对象进行交互.

目前,我们导入类型库并生成组件包装器,然后能够以相当自然的方式进行方法调用和访问属性.

object->myProperty = 42;
object->doSomething(666);
Run Code Online (Sandbox Code Playgroud)

但是,我们被COM对象的接口(仍在扩展和开发)的更改所困扰,导致我们自己的应用程序失败,因为某些方法GUID似乎无效 - 即使对接口的唯一更改是添加一种新方法).

后期绑定被认为是解决这个问题的一种方法.我认为这需要我们的代码更改,如下所示:

object.OlePropertySet("myProperty", 42);
object.OlePrcedure("doSomething", 666);
Run Code Online (Sandbox Code Playgroud)

显然这对于​​读写来说是痛苦的,所以我们必须编写包装类.

有没有办法在导入类型库时自动生成后期绑定包装器?并且,如果是这样,他们是否足够聪明,只能在创建对象时执行文本绑定,而不是每次调用方法?

c++ com c++builder late-binding

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

在Delphi中将UnicodeString附加到WideString

我很好奇Delphi 2010中这段代码会发生什么:

function foo: WideString;
var 
   myUnicodeString: UnicodeString; 
begin
  for i:=1 to 1000 do
  begin
    myUnicodeString := ... something ...;

    result := result + myUnicodeString;  // This is where I'm interested
  end;
end;
Run Code Online (Sandbox Code Playgroud)

涉及多少字符串转换,是否有任何特别糟糕的性能?

我知道该函数应该只返回一个UnicodeString,但我在VCL流代码中看到了这种反模式,并希望了解该过程.

delphi unicode-string widestring

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

好吧,要么我疯了,要么IBM编译器中有一个错误

如果他们能告诉我为什么streamstream<<(char)忽略0x05,我会给任何人买啤酒.这个节目正在制作中000102030406070809E280081150121314

我认为预期的输出更像是: 00010203040506070809E2800811050505050505050550121314

IBM i(aka AS/400)C++编译器,在V7R1上运行.

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <stdint.h>

using namespace std;


typedef int8_t byte;

int main(int argc, char* argv[])
{
    stringstream sstr2;
    sstr2 << char(0x00);
    sstr2 << char(0x01);
    sstr2 << char(0x02);
    sstr2 << char(0x03);
    sstr2 << char(0x04);
    sstr2 << char(0x05);
    sstr2 << char(0x06);
    sstr2 << char(0x07);
    sstr2 << char(0x08);
    sstr2 << char(0x09);
    sstr2 << char(0xe2);
    sstr2 << char(0x80);
    sstr2 << char(0x08);
    sstr2 << char(0x11);
    sstr2 << char(0x05);
    sstr2 …
Run Code Online (Sandbox Code Playgroud)

c++ stringstream

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

串口通讯初始化

当时我们正在尝试为串行通信创建一个接口,以便能够与微处理器进行通信。

实际上 - 一切正常。几乎!为了能够与我们的控制器通信,我们需要与它同步。为此,我们编写一个字符串:"?0{SY}13!",然后控制器应回复"!0{SY}F5?"以接受同步请求。为此,我们使用一个writeData函数(有效 - 我们知道使用echo),然后我们使用 areadData来阅读答案。问题是,由于某种原因,它不会读取任何内容。虽然它返回1成功,但它读取的字符是恒定的" "(没有)。

现在是奇怪的部分 - 如果我们使用外部终端程序来初始化端口(如 putty),然后关闭程序,那么一切正常。它接受同步请求、回答(我们可以阅读它),然后我们可以做我们想做的一切。但是除非我们使用外部程序来初始化端口,否则它不起作用。

初始化接口的构造函数如下所示:

SerialIF::SerialIF(int baud, int byteSize, int stopBits, char* parity, int debug)
{
    string coutport = getPort();    
    wstring wideport;               
    debug_ = debug;                 //Debuglevel

    sync = false;                   //sync starts with false

    error = false;                  //Error false as beginnging

    //this is just for converting to the right type
    for (int i = 0; i < coutport.length(); i++) …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi serial-communication readfile

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

Typescript 类型保护和粗箭头功能

这不应该正确编译吗?我"Property 'hello' does not exist on type 'object'.在突出显示的行中收到错误“。

我可以g.hello毫无问题地访问胖箭头功能之外。

class Test {
    constructor() {
    }
    hello() : string {
        return "Hello";
    }
}

let g : object;

if (g instanceof Test) {
    () => {
        g.hello();    ////// ERROR HERE /////
    };
}
Run Code Online (Sandbox Code Playgroud)

typescript typeguards

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