如何使用Move连接字符串数组.我试过这个,但我无法想象如何让Move操作正常工作.
program Project2;
{$POINTERMATH ON}
procedure Concat(var S: String; const A: Array of String);
var
I, J: Integer;
Len: Integer;
begin
Len := 0;
for I := 0 to High(A) do
Len := Len + Length(A[I]);
SetLength(S, Length(S) + Len);
for I := 0 to High(A) do
Move(PWideChar(A[I])[0], S[High(S)], Length(A[I]) * SizeOf(WideChar));
end;
var
S: String;
begin
S := 'test';
Concat(S, ['test', 'test2', 'test3']);
end.
Run Code Online (Sandbox Code Playgroud) 如何正确地将C与Delphi静态链接?德尔福吐出一个错误说:
[dcc32错误] Project1.dpr(15):E2065不满意的前向或外部声明:'测试'
C编译器是带有COFF目标文件的Visual C++.
德尔福:
program Project1;
{$L C:\Source.obj}
function Test(): Integer; cdecl; external;
begin
WriteLn(Test);
end.
Run Code Online (Sandbox Code Playgroud)
C:
extern "C" int __cdecl Test()
{
return 12;
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如何链接包含 WinAPI 调用的 C 代码?链接时出现以下错误:
[dcc32错误] Project1.dpr(16): E2065 不满足转发或外部声明: '__imp__GetCurrentThreadId@0'
考虑以下示例。
德尔福:
program Project1;
uses
Windows;
{$L C:\Source.obj}
function Test: DWORD; cdecl; external name '_Test';
begin
WriteLn(Test);
end.
Run Code Online (Sandbox Code Playgroud)
C:
program Project1;
uses
Windows;
{$L C:\Source.obj}
function Test: DWORD; cdecl; external name '_Test';
begin
WriteLn(Test);
end.
Run Code Online (Sandbox Code Playgroud) 如何在函数参数中使用默认常量指针?nil工作,但常规指针不工作.
program Project1;
type
TFoo = function(const A, B): Integer;
function FooA(const A, B): Integer; inline;
begin
WriteLn('FooA');
end;
function FooB(const A, B): Integer; inline;
begin
WriteLn('FooB');
end;
procedure Something(const Foo: TFoo = @FooA); // Constant expression expected
begin
end;
begin
Something(FooB);
end.
Run Code Online (Sandbox Code Playgroud)