小编Jos*_*ine的帖子

Delphi 7 - 使用TIdDecoderMIME解码Base64

好吧,这让我疯了,哈哈.

我有一个Base64字符串,我正在尝试使用TIdDecoderMIME将其解码为TMemoryStream.

我目前的代码如下:

Var MStream:TMemoryStream; Decoder:TIdDecoderMIME;
begin
  Decoder := TIdDecoderMIME.Create(nil);
  MStream := TMemoryStream.Create;
  Decoder.DecodeToStream(BSting,MStream);
end;
Run Code Online (Sandbox Code Playgroud)

其中BString = My Base64字符串.

现在,当代码运行时,我收到一条错误消息"DecodeToString中的大小不均匀".

有任何想法吗?

任何帮助是极大的赞赏.谢谢.

delphi base64 memorystream delphi-7

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

Delphi XE2 - 构建64位应用程序

我知道你应该能够在Delphi XE2中构建x64应用程序......

我使用的是付费版本,入门版本.

在此输入图像描述

我也检查了选项,它不会让我改为64位.只有32.我也在64位机器上运行XE2.

可能是因为我有入门版吗?如果是这样有点荒谬,请看我为这个软件支付了200多美元.

delphi 64-bit delphi-xe2

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

如何在编译时获取汇编指令的机器代码?

我希望能够将单行ASM转换为shellcode.IE:

CALL EBX
Run Code Online (Sandbox Code Playgroud)

我该怎么做,并且能够正确转换这个shellcode,以便我可以将它存储在delphi应用程序的变量中.IE:

var ShellCodeArray:  array[0..3] of Byte = ($55,$8B,$EC,$81);
Run Code Online (Sandbox Code Playgroud)

delphi assembly basm shellcode

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

比较两个具有相同值的TCHAR会导致错误

我正在尝试检查我的应用程序路径,如果它不是指定的路径,则移动它.我觉得我的代码很稳定,但它无法正常工作.

TCHAR pCheck[MAX_PATH];
TCHAR xPath[MAX_PATH];

GetModuleFileName(NULL,xPath,MAX_PATH);

if(SHGetSpecialFolderPath(HWND_DESKTOP, pCheck, CSIDL_DESKTOP, FALSE)){
    wcscat(pCheck,L"\\NewFile.exe");
    MessageBox(NULL,pCheck,NULL,NULL);
    MessageBox(NULL,xPath,NULL,NULL);
    if(pCheck!=xPath){  
        CopyFile(xPath,pCheck,0);
        ShellExecute(0,L"open",pCheck,NULL,NULL,SW_SHOW);
        return 0;
    }else{
        MessageBox(NULL,L"New Location",NULL,NULL); 
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

即使文件在新路径中,它仍然会产生pCheck!= xPath

我从来没有得到"新位置"消息框.当显示前两个消息框时,路径是相等的...

c++ compare tchar getmodulefilename

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

Delphi XE2 - 如何获取指定网站的IP?

我有一个程序,在其中检查Web服务器上的php文件,以查看用户是否已经过验证.php文件在数据库中运行,检查和回声"验证"是否存在.

现在,人们现在可以通过安装Xampp,将我的服务器路由到其主机文件中的127.0.0.1,然后设置回声验证的脚本,轻松绕过验证系统.

我希望能够检查我的域的IP地址,以检查它是否路由到127.0.0.1.

我如何通过delphi解析域的IP地址?

delphi ip resolveurl

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

Delphi - Byte的数组[0..693] - 到B64编码的字符串

我的代码中有一个声明的变量,如下所示:

Var
   VarName:Array[0..693] of Byte = ( and my array here );
Run Code Online (Sandbox Code Playgroud)

我的用途中有EncdDecd ..

我期待使用EncdDecd.pas中的EncodeBase64函数将此Byte数组编码为base64字符串

但是我不确定如何将它返回到漂亮而漂亮的b64字符串中,该字符串可以使用DecodeBase64直接转换回字节数组...

我尝试过几种不同的方法..

Var Res:PWideChar;
begin
    StringToWideChar(EncodeBase64(@VarName, 693), Res, 693);
    ClipBoard.SetTextBuf(Res);
end;
Run Code Online (Sandbox Code Playgroud)

使用该代码访问违规...

还尝试过:

begin
    ClipBoard.SetTextBuf(PWideChar(EncodeBase64(@VarName, 693)));
end;
Run Code Online (Sandbox Code Playgroud)

返回一个充满扭曲的中文符号的字符串....

任何有关返回此字符串的帮助将不胜感激..

谢谢!

delphi base64 bytearray delphi-xe2

3
推荐指数
1
解决办法
2116
查看次数

Delphi - BinToHex和HexToBin:逆转

我有一个字节数组,我希望转换为十六进制字符串,然后返回到一个字节数组.

我使用以下代码转换为十六进制字符串:

function bintoHex(const bin: array of byte): String;
const HexSymbols = '0123456789ABCDEF';
var i: integer;
begin
  SetLength(Result, 2*Length(bin));
  for i :=  0 to Length(bin)-1 do begin
    Result[1 + 2*i + 0] := HexSymbols[1 + bin[i] shr 4];
    Result[1 + 2*i + 1] := HexSymbols[1 + bin[i] and $0F];
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我不确定如何将其转换回正确的字节数组.我正在拍摄以下内容:

Type TDCArray = Array of Byte;

function xHexToBin(const HexStr: String): TDCArray;
const HexSymbols = '0123456789ABCDEF';
var i: integer;
begin
  SetLength(Result, ???); //Need to now get half of the …
Run Code Online (Sandbox Code Playgroud)

arrays delphi hex byte delphi-xe2

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

为什么RegSetValueEx只添加半个字符串?

注意:我使用的是Delphi XE2

我想添加一个注册表项.这是我目前的代码:

function AddRegKey(Key:HKEY;Keyname,Value:String):Boolean;
var
  phkResult:HKEY;
begin
  if RegOpenKeyEx(Key, PWideChar('SOFTWARE\Microsoft\Windows\CurrentVersion\Run'), 0, KEY_SET_VALUE, phkResult) = ERROR_SUCCESS then
    begin
      Result := (RegSetValueEx(phkResult, PWideChar(KeyName), 0, REG_SZ, PWideChar(Value), Length(Value)) = ERROR_SUCCESS);
      RegCloseKey(phkResult);
    end
  else Result:=False;
end;

begin
    If AddRegKey(HKEY_CURRENT_USER,'TestTest','123456789') Then
        MessageBox(0,'Success','Test',0);
end.
Run Code Online (Sandbox Code Playgroud)

这导致以下结果:

在此输入图像描述

它只添加前四个字符

但是当我将"Value"参数更改为:

123456789123456789
Run Code Online (Sandbox Code Playgroud)

然后它补充说:

123456789
Run Code Online (Sandbox Code Playgroud)

因此,由于某种原因,它似乎只是增加了给定值的一半.我该如何解决这个问题?

我在RegSetValueEx中为*lpData参数传递了错误的数据类型吗?

delphi registry type-conversion

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

如何从C++ DLL导出函数并在delphi中使用?

我试图用C++创建一个DLL并导出一个函数.

这是我的C++代码:

#include <Windows.h>

void DLLMain(){

}

__declspec(dllexport) void xMain(){
MessageBox(NULL,L"Test",L"Test",NULL);
}
Run Code Online (Sandbox Code Playgroud)

这是我的delphi代码:

program prjTestDllMain;

Uses
  Windows;

Var
  xMainPrc:procedure;stdcall;
  handle : THandle;
begin
    handle := LoadLibrary('xdll.dll');
    if handle <> 0 then
    begin
        MessageBox(0,'DLL Loaded', 0, 0);
        @xMainPrc := GetProcAddress(handle, 'xMain');
        if @xMainPrc <> nil then
            MessageBox(0,'Function Loaded', 0, 0)
        else
          MessageBox(0,'Function Not Loaded', 0, 0);
        MessageBox(0,'Process End', 0, 0);
        FreeLibrary(handle);
    end else
      MessageBox(0,'DLL Not Loaded', 0, 0);
end.
Run Code Online (Sandbox Code Playgroud)

我得到一个"DLL Loaded"的消息框就好了.但之后我得到"功能未加载".我在这做错了什么?

c++ delphi dll

3
推荐指数
1
解决办法
4846
查看次数

Delphi - 将NtCreateKey与HKCU一起使用

并感谢您抽出宝贵时间来审视我的问题.

我正在尝试使用本机NtCreateKey API在HKCU中创建一个密钥.

我有一个来源可以帮助我理解API的工作原理,但我似乎无法使其适用于HKCU,只有HKLM ......这可能吗?

源代码我已经:

const
   KeyNameBuffer: AnsiString = '\Registry\Machine\SOFTWARE'; //Assuming I need to change this.....
   NewKeyNameBuffer: AnsiString = 'Parent Key To Create';
   HiddenKeyNameBuffer: AnsiString = 'Main Key To Create';
   HiddenValueNameBuffer: AnsiString = 'Value Key To Create';

 procedure TForm1.btnDemoClick(Sender: TObject);
 var
    KeyName, ValueName: UNICODE_STRING;
    SoftwareKeyHandle, SysKeyHandle, HiddenKeyHandle: THandle;
    Status: ULONG;
    ObjectAttributes: OBJECT_ATTRIBUTES;
    Disposition: ULONG;
    Buffer: array of WideChar;
 begin

    //
    // Open the Software key
    //
   SetLength(Buffer, Length(KeyNameBuffer));
   MultiByteToWideChar(CP_UTF8, 0, @KeyNameBuffer[1], Length(KeyNameBuffer),
       PWideChar(Buffer), Length(Buffer));
   KeyName.Buffer := @Buffer[0];
    KeyName.Length := …
Run Code Online (Sandbox Code Playgroud)

delphi registry winapi delphi-7

2
推荐指数
1
解决办法
492
查看次数