我在Lazarus编程论坛上询问如何打开物理磁盘.我想允许用户在单击"选择磁盘"按钮时从系统中选择物理磁盘.Stack Overflow中有一些类似但不完全相同的示例(例如Delphi - 使用DeviceIoControl传递IOCTL_DISK_GET_LENGTH_INFO来获取闪存介质的物理大小(非分区)).
有很多C和C++使用的例子CreateFile(在文档中,特别是调用的例子DeviceIoControl)但我找不到任何Free Pascal或Delphi,我还不够好,我还没有找到如何做到这一点.
任何人都可以指向我解释它的链接的方向或更好仍然是用Delphi或Free Pascal编写的实际示例?任何人都可以帮我理解如何使用它吗?
平台:Lazarus 1.1,FreePascal 2.7.1,Win 7 32位.
我有一个字符串值如下:
FileName[12345][45678][6789].jpg
Run Code Online (Sandbox Code Playgroud)
默认情况下(假设这是默认行为0),我的程序当前从最后一对方括号中取出最后一组数字到文件名的最右边,即6789.它使用以下代码:
if chkbxOverrideUniqueID.Checked then
IDOverrideValue := StrToInt(edtToggleValue.Text);
// User is happy to find the right most unique ID
if not chkbxOverrideUniqueID.Checked then
LastSquareBracket := RPos(']', strFileName);
PreceedingSquareBracket := RPosEx('[', strFileName, LastSquareBracket) + 1;
strFileID := AnsiMidStr(strFileName, PreceedingSquareBracket, LastSquareBracket - PreceedingSquareBracket)
else // User doesn't want to find the rightmost ID.
// and now I am stuck!
Run Code Online (Sandbox Code Playgroud)
但是,我现在为用户添加了一个指定非默认行为的选项.例如,如果他们输入'1',则表示"从最右边的ID中查找第一个ID".例如[45678],因为[6789]是默认行为0,请记住.如果他们输入2,我希望它找到[12345].
我的问题:我如何调整上述代码才能实现这一目标?
我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的.所以,我能得到的任何帮助将不胜感激.:)
作为更大程序的一部分,我需要将一个字符串变量写入剪贴板.我在Lazarus(版本1.0.12)中创建了一个新项目,所以我可以尝试弄清楚如何在没有由额外的,不必要的代码引起的复杂性的情况下这样做,我在下面包含了这些:
program varToClipboard;
uses Clipbrd;
var
textToCopy:string;
begin
textToCopy := 'Test text from Pascal';
Clipboard.AsText := textToCopy;
end.
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,以及所需的LCLBase依赖项,我在运行编译的EXE时在CMD中收到以下错误:
An unhandled exception occurred at $000000000043D45E :
EAccessViolation : Access violation
$000000000043D45E CLIPBOARDREGISTERFORMAT, line 98 of ./include/lclintf.inc
$000000000043C35B PREDEFINEDCLIPBOARDFORMAT, line 185 of lclintf.pas
$0000000000415B0C TCLIPBOARD__SETASTEXT, line 452 of ./include/clipbrd.inc
$0000000000401802 main, line 12 of varToClipboard.lpr
Run Code Online (Sandbox Code Playgroud)
根据文档,我似乎做得很对.尽管如此,我发现文档缺乏时间.
另外,我必须做什么才能运行已编译的EXE(只生成并将字符串写入剪贴板)而不会弹出控制台窗口?
我有以下内容:
TDirection = (dirNorth, dirEast, dirSouth, dirWest);
TDirections = set of TDirection;
Run Code Online (Sandbox Code Playgroud)
在一个单独的类中,我将它声明为属性:
property Directions: TDirections read FDirections write FDirections;
Run Code Online (Sandbox Code Playgroud)
我想要的是能够像对待布尔人一样对待它们,所以例如如果dirNorth是真的那么它将是1,如果是假的话0.
我想把它想象成 (1,0,0,0)
我想检查方向是否为True,我可以使用:
var
IsTrue: Boolean;
begin
IsTrue := (DirNorth in Directions);
Run Code Online (Sandbox Code Playgroud)
不确定上述是否正确,但我的另一个问题是如何更改其中一个方向True或False?
我现在达到了我的一个混乱状态:(
这是我尝试设置值的最后一件事,但我得到的是Illegal Expression(在Lazarus中).
Directions(TDirection(DirNorth)) := True;
Run Code Online (Sandbox Code Playgroud) “ Inno-Setup编译器”不知道pascal数据类型“ QWord”。是否有64位等效项?
谢谢
是否有编译器定义,告诉源代码是否使用delphi编译,在等同于Free Pascal中的FPC定义的意义上?
我正在开发一个应该兼容三个Pascal编译器的单元(Lazarus/Free Pascal,Delphi和winsoft PocketStudio).编译器之间存在一些差异,因此我想在编译器特定版本中提供代码的一些关键部分.
对于免费Pascal,我可以写
{$IFDEF FPC}
DoSomething;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
但是Delphi的等价物是什么?
如何将FPC .o从库链接到Delphi可执行文件.当我尝试链接以下代码时,我得到了一堆不满意的前向或外部声明.
library project1;
{$mode objfpc}{$H+}
uses
Classes
{ you can add units after this };
function Test: Integer;
begin
Result := -1;
end;
begin
end.
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$SYSTEM'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$OBJPAS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$FPINTRES'
[dcc64 Error] Project2.dpr(170): …Run Code Online (Sandbox Code Playgroud) 为什么没有睡眠(1)进入临界区是不可能的?
type
TMyThread = class(TThread)
public
procedure Execute; override;
end;
var
T: TMyThread;
c: TRTLCriticalSection;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(c);
T := TMyThread.Create(false);
end;
procedure TMyThread.Execute;
begin
repeat
EnterCriticalSection(c);
Sleep(100);
LeaveCriticalSection(c);
sleep(1); // can't enter from another thread without it
until false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnterCriticalSection(c);
Caption := 'entered';
LeaveCriticalSection(c);
end;
Run Code Online (Sandbox Code Playgroud)
由于代码太多而无法发布此文本文本文本文本文本.哦,顺便说一下,如果该部分是由线程创建的,那么它工作正常.
我有这个C代码:
/*
WARNING: The order of this table must also match the order of a table
located in AcquireResizeFilter() in "resize.c" otherwise the users filter
will not match the actual filter that is setup.
*/
typedef enum
{
UndefinedFilter,
PointFilter,
BoxFilter,
TriangleFilter,
HermiteFilter,
HannFilter,
HammingFilter,
BlackmanFilter,
GaussianFilter,
QuadraticFilter,
CubicFilter,
CatromFilter,
MitchellFilter,
JincFilter,
SincFilter,
SincFastFilter,
KaiserFilter,
WelchFilter,
ParzenFilter,
BohmanFilter,
BartlettFilter,
LagrangeFilter,
LanczosFilter,
LanczosSharpFilter,
Lanczos2Filter,
Lanczos2SharpFilter,
RobidouxFilter,
RobidouxSharpFilter,
CosineFilter,
SplineFilter,
LanczosRadiusFilter,
CubicSplineFilter,
SentinelFilter /* a count of all the filters, not a …Run Code Online (Sandbox Code Playgroud) 使用SSL时如何在Indy中设置ConnectTimeout / ReadTimeout?
MCVE:
program mcve;
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}SysUtils, IdHTTP, IdSSLOpenSSL, DateUtils;
var
HTTP : TIdHTTP;
SSL : TIdSSLIOHandlerSocketOpenSSL;
Started : TDateTime;
begin
HTTP := TIdHTTP.Create();
try
HTTP.ReadTimeout := 1000;
HTTP.ConnectTimeout := 2000;
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
SSL.ConnectTimeout := HTTP.ConnectTimeout;
SSL.ReadTimeout := HTTP.ReadTimeout;
SSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
HTTP.IOHandler := SSL;
Started := Now;
try
HTTP.Get(ParamStr(1));
except
On E: Exception do WriteLn(E.Message);
end;
Writeln(FormatDateTime('hh:nn:ss', SecondsBetween(Started, Now) / SecsPerDay));
finally
HTTP.Free;
end;
end.
Run Code Online (Sandbox Code Playgroud)
使用httpConnectTimeout / ReadTimeout时,只有在使用时,此问题才能解决https …
freepascal ×10
delphi ×6
lazarus ×6
pascal ×4
fpc ×2
clipboard ×1
delphi-xe ×1
delphi-xe5 ×1
indy ×1
inno-setup ×1
installer ×1
winapi ×1