var i : integer;
i := 1234567;
Run Code Online (Sandbox Code Playgroud)
鉴于上述情况,我希望字符串"1,234,567"作为输出(假设英国语言环境).IntToStr只给了我"1234567".我确定这是一个单行,但我找不到它......
我希望能够创建一个文件,将其分发给最终用户,但阻止他们对文件进行修改.
现在,显然,我实际上无法阻止任何人修改文件 - 所以我的方法是检测并拒绝文件,如果它被修改.
我的目的是生成文件内容的盐渍哈希并将其附加到文件中.在读取时,在读取文件的其余部分之前验证散列.这样做的缺点是我必须在读取文件的可执行文件中分发固定的"salt".显然我可以在某种程度上混淆它,但这仍然感觉像一个薄弱的环节.
有没有更好的方法来解决这类问题?
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;
我正在使用TPageControl,其中某些页面不可见.
这打破了TabIndex和ActivePageIndex属性的正常1:1映射.
在大多数地方,我可以使用ActivePageIndex(或ActivePage本身)来获取当前页面,但我想要一个动态工具提示提示,这需要我确定哪个页面与特定选项卡索引相关联.
如果我调用pageControl.IndexOfTabAt(X,Y),我会得到一个Tab Index,但我不能直接使用它作为Pages []数组的索引,因为某些页面选项卡不可见.
我可以明确地遍历页面,忽略可见的页面,但感觉VCL中应该有一些东西已经为我做了这个......?
我想在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++ 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)
显然这对于读写来说是痛苦的,所以我们必须编写包装类.
有没有办法在导入类型库时自动生成后期绑定包装器?并且,如果是这样,他们是否足够聪明,只能在创建对象时执行文本绑定,而不是每次调用方法?
我很好奇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流代码中看到了这种反模式,并希望了解该过程.
如果他们能告诉我为什么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) 当时我们正在尝试为串行通信创建一个接口,以便能够与微处理器进行通信。
实际上 - 一切正常。几乎!为了能够与我们的控制器通信,我们需要与它同步。为此,我们编写一个字符串:"?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) 这不应该正确编译吗?我"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) c++ ×4
delphi ×4
c++builder ×1
com ×1
encryption ×1
hash ×1
late-binding ×1
memory-leaks ×1
protection ×1
readfile ×1
string ×1
stringstream ×1
tpagecontrol ×1
typeguards ×1
typescript ×1
widestring ×1
winapi ×1
windows ×1