标签: delphi-xe

在Delphi XE中读取TStream的问题

在以前的Delphi版本中,代码如下:

   var InBuf: array[1..45] of Byte;

   Count := InStream.Read(InBuf, SizeOf(InBuf));
Run Code Online (Sandbox Code Playgroud)

用正确的值填充变量InBuf(每个字节都有一个值).现在在Delphi XE中,数组的每个第二个字节都是0,我想是因为Byte数据类型是Delphi XE中的Unicode性质的两倍大.但是,我的流已经生成并且需要通过这个过程,所以我需要另一种类型(可能?),如果有人遇到这个问题,那是Byte的一半大小或另一种解决方案.谢谢

delphi byte types tstream delphi-xe

0
推荐指数
1
解决办法
582
查看次数

模块"MpLib.dll"中地址003B0E8E处的访问冲突.读取地址00120BF4

我已经在Stackoverflow上搜索了我遇到的问题,但它们都非常具体针对特定的访问冲突.

我认为我遇到问题的代码是一个名为MpqExtractFile存储在DLL中的函数.

功能:

function MpqExtractFile(var hMPQ: Integer; szToExtract, szExtracted: AnsiString): Boolean; stdcall; external 'MpqLib.dll' name 'B2';
Run Code Online (Sandbox Code Playgroud)

呼叫:

if MpqExtractFile(hMPQ, 'war3map.j', AnsiString(tempDir+'\war3map.j')) = True
then ShowMessage('Success.')
else ShowMessage('Failed.');
Run Code Online (Sandbox Code Playgroud)

执行此代码后,我的应用程序抛出访问冲突错误,因此ShowMessage根本不显示.

我不确定上述是否足以估计问题可能是什么,但如果还有什么我应该告诉我.

编辑

这是我一直在解释的VB.NET源代码的摘录:

Declare Function MpqExtractFile Lib "MpqLib.dll" Alias "B2" (ByVal hMPQ As Integer, ByVal szToExtract As String, ByVal szExtracted As String) As Boolean
Run Code Online (Sandbox Code Playgroud)

我显然不熟悉其他语言的声明,但我在声明VB函数的同一个VB文件中找到了下面的函数.

BOOL WINAPI MpqExtractFile(HANDLE hMpq, const char * szToExtract, const char * szExtracted);
Run Code Online (Sandbox Code Playgroud)

先谢谢你!

delphi delphi-xe

0
推荐指数
1
解决办法
1681
查看次数

如何在Delphi中安装和使用VerySimpleXML?

我是Delphi的新手,我需要有关如何安装VerySimpleXML的帮助.我也非常感谢有关如何使用它将html转换为xml的教程,如果你们知道我在哪里可以找到这样的教程.

delphi delphi-xe

0
推荐指数
1
解决办法
409
查看次数

在delphi中启用防止利用的保护

我需要编写一个安全的程序,防止它在Delphi中被利用.我需要启用所有保护和机制,但我不明白这样做.

保护示例:

  1. 安全的SEH
  2. SEH覆盖保护(SEHOP)
  3. DEP永久

以及如何在EMET下运行我的程序并获得绿色标记?

感谢您的回复并与我分享您的信息.

delphi exploit buffer-overflow delphi-xe

0
推荐指数
1
解决办法
446
查看次数

如何将字符串或字符转换为其unicode表示并返回?

我正在学习更多有关Unicode的知识.有人可以演示如何将代码点值转换为字符串,反之亦然.

例如:如何转换U+0037为其字符或字符串表示形式7.

还请说明如何为ascii执行此操作.例如:转换 为其字符或字符串表示形式,即空格.

delphi unicode delphi-xe

0
推荐指数
1
解决办法
1520
查看次数

德尔福 - 字符串中的单引号

我试图填充一个字符串变量以在TQuery中使用.

如何在字符串变量中获得单引号.在下面的代码中,ShowMessage命令将CompName显示为'TestComp',但sql_str中的值是''TestComp''?

我尝试过使用QuotedStr.

  CompName := 'TestComp';
  ShowMessage('SELECT datname FROM pg_catalog.pg_database WHERE     lower(datname) = ''' + CompName + '''');
  sql_str := 'SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = ''' + CompName + '''';
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

0
推荐指数
1
解决办法
2909
查看次数

有没有办法解决 Delphi 中的 I/O 错误 6?

procedure TfrmSongs.Display;
var
  i: Integer;
begin
  redOutput.Clear;
  redOutput.Lines.Add('The TOP 10');
  for i := 1 to iCount-1 do
  begin
    redOutput.Lines.Add(IntToStr(i)+arrSongs[i]);
  end;
end;

procedure TfrmSongs.FormActivate(Sender: TObject);
var
  tSongList: TextFile;
  sSong: string;
begin
  iCount := 0;
  AssignFile(tSongList, ExtractFilePath(Application.ExeName)+'Songs.txt');
  Reset(tSongList);
  while not EOF do
  begin
    Readln(tSongList, sSong);
    arrSongs[iCount] := sSong;
    Inc(iCount);
  end;
  CloseFile(tSongList);
  Display;
end;
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过富编辑中的文本文件显示我尝试创建的数组。但是每次我运行该应用程序时,它都会给我一个“I/O 错误 6”错误,并且没有任何显示。我不知道它是否与文本文件有关,或者是否与显示过程有关。

delphi delphi-xe delphi-xe2

0
推荐指数
1
解决办法
1376
查看次数

如何在delphi中更改tdbgrid中所选行的颜色

我想在delphi中创建一个应用程序,我想改变tdbgrid所选行的颜色,这是基于搜索..可以实现..

delphi tdbgrid delphi-xe

-1
推荐指数
1
解决办法
8272
查看次数

在Delphi中将文件复制到剪贴板

我正在尝试将文件复制到剪贴板.互联网上的所有例子都是一样的.我使用的是http://embarcadero.newsgroups.archived.at/public.delphi.nativeapi/200909/0909212186.html,但它不起作用.

我使用Rad Studio XE,然后传递完整的路径.在模式调试中,我收到一些警告,例如:

Debug Output:
Invalid address specified to RtlSizeHeap( 006E0000, 007196D8 )
Invalid address specified to RtlSizeHeap( 006E0000, 007196D8 )
Run Code Online (Sandbox Code Playgroud)

我不确定我的环境是否相关:Windows 8.1 64位,Rad Studio XE.当我尝试粘贴剪贴板时,没有任何反应.此外,使用监视工具查看剪贴板,此工具显示错误.

代码是:

    procedure TfrmDoc2.CopyFilesToClipboard(FileList: string);
    var
      DropFiles: PDropFiles;
      hGlobal: THandle;
      iLen: Integer;
    begin
      iLen := Length(FileList) + 2;
      FileList := FileList + #0#0;
      hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
        SizeOf(TDropFiles) + iLen);
      if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');
      begin
        DropFiles := GlobalLock(hGlobal);
        DropFiles^.pFiles := SizeOf(TDropFiles);
        Move(FileList[1], (PChar(DropFiles) …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

-1
推荐指数
1
解决办法
2252
查看次数

我可以在2次比较之间使用逻辑函数(和,或)

我不确定在比较之间是否通常不可能使用逻辑函数,或者我是否错误地使用了我的逻辑语句,因为当我将所有变量(NewUsername,NewUsername2,NewPass,NewPass2)设置为字符"hi"时,它会继续显示Application.MessageBox.

    procedure TNewUserFrm.ApplyBtnClick(Sender: TObject);
    begin
      if (NewUsername <> NewUsername2) or (NewPass <> NewPass2) then
      begin
        Application.MessageBox('The usernames or passwords do not match. Try again', 'Error');
      end
      else
      begin
        if not modFile.UsersDataSet.Active then modFile.UsersDataSet.Open;
        modFile.UsersDataSet.Append;
        modFile.UsersDataSet.FieldByName('Username').AsString := NewUsername.Text;
        modFile.UsersDataSet.FieldByName('Password').AsString := NewPass.Text;
        modFile.UsersDataSet.Post;
        NewUserFrm.Hide;
      end;
      NewUsername.Text := '';
      NewUsername2.Text := '';
      NewPass.Text := '';
      NewPass2.Text := '';
      ApplyBtn.SetFocus;
    end;
Run Code Online (Sandbox Code Playgroud)

我尝试过使用"和"语句,"或"语句,我也尝试使用嵌套的"if"语句,但是会出现相同的结果

delphi logic delphi-xe

-1
推荐指数
1
解决办法
78
查看次数