我在FASM中使用GetFileAttributesA来确定文件是否存在.我知道如果文件不存在,返回值将为INVALID_FILE_ATTRIBUTES,但我不知道如何检查此值.
我的代码:
invoke GetFileAttributes,lpFileName
cmp eax,IDK WHAT TO CHECK FOR
je notfound
jne found
invoke ExitProcess,0
Run Code Online (Sandbox Code Playgroud)
看作编译器无法将INVALID_FILE_ATTRIBUTES识别为值:
cmp eax,INVALID_FILE_ATTRIBUTES
Run Code Online (Sandbox Code Playgroud)
不管用.
有没有人知道这个常数的值,所以我可以手动输入它?
任何帮助表示赞赏.谢谢
在JensBjörnhager的回复之后,以下是其他任何感兴趣的人的工作代码:
invoke GetFileAttributes,lpFileName
cmp eax,-1
je notfound
jne found
invoke ExitProcess,0
Run Code Online (Sandbox Code Playgroud)
甚至:
invoke GetFileAttributes,lpFileName
cmp eax,$ffffffff
je notfound
jne found
invoke ExitProcess,0
Run Code Online (Sandbox Code Playgroud)
再次感谢JensBjörnhager!
我在Delphi XE2中使用以下代码编写了一个DLL:
procedure xMain(MSG:String);export;
begin
MessageBox(0,PWideChar(MSG),'Title',0);
end;
exports xMain;
Run Code Online (Sandbox Code Playgroud)
现在,我在FASM应用程序中导入此函数,如下所示:
library dllfile, "testdll.dll"
import dllfile,\
xMain, "xMain"
Run Code Online (Sandbox Code Playgroud)
利用就是如此:
section ".data" data readable writeable
szMSG db "Message from FASM application!",0
section ".code" code readable executable
invoke xMain,szMSG
Run Code Online (Sandbox Code Playgroud)
但是生成的消息框会出现扭曲的字符,如下所示:

这是函数调用的确切结果.
我该如何解决这个问题?
注意:我使用的是Delphi 7.
有没有办法通过换行符拆分字符串?
我想要以下内容:
procedure Split
(const Delimiter: Char;
Input: string;
const Strings: TStrings) ;
begin
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
end;
var
xMSG:String;
xStr:String;
xStrList:TStrings;
xLineBreak:String;
xHello:String;
xWorld:String;
begin
xLineBreak := AnsiString(#13#10);
xMSG := 'Hello ' + xLineBreak + 'World';
xStrList := TStringList.Create;
Split(xLineBreak,AnsiString(xMSG),xStrList);
xHello := xStrList[0];
xWorld := xStrList[1];
MessageBox(0,PAnsiChar(xHello + xWorld),'Test',0);
end.
Run Code Online (Sandbox Code Playgroud) 注意:我只想使用wininet,而不是urlmon-urldownloadtofile.
好吧,我有以下代码在XE2中完美地下载文件:
procedure DownloadFile(URL: string; Path: string);
const
BLOCK_SIZE = 1024;
var
InetHandle: Pointer;
URLHandle: Pointer;
FileHandle: Cardinal;
BytesRead: Cardinal;
DownloadBuffer: Pointer;
Buffer: array [1 .. BLOCK_SIZE] of byte;
BytesWritten: Cardinal;
begin
InetHandle := InternetOpen(PWideChar(URL), 0, 0, 0, 0);
URLHandle := InternetOpenUrl(InetHandle, PWideChar(URL), 0, 0, 0, 0);
FileHandle := CreateFile(PWideChar(Path), GENERIC_WRITE, FILE_SHARE_WRITE, 0,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
DownloadBuffer := @Buffer;
repeat
InternetReadFile(URLHandle, DownloadBuffer, BLOCK_SIZE, BytesRead);
if not WriteFile(FileHandle, DownloadBuffer, BytesRead, BytesWritten, 0) or
(BytesWritten <> BytesRead) then
RaiseLastOSError;
until BytesRead < …Run Code Online (Sandbox Code Playgroud) 在创建一个继承自另一个类的类时,在创建派生类时,是否应该调用基类的构造函数?
Type
TBase = Class
constructor xMain;
End;
TDerived = Class(TBase)
constructor xMain;
End;
constructor TBase.xMain;
begin
MessageBox(0,'TBase','TBase',0);
end;
constructor TDerived.xMain;
begin
MessageBox(0,'TDerived','TDerived',0);
end;
Var
xTClass:TDerived;
begin
xTClass := TDerived.xMain;
end.
Run Code Online (Sandbox Code Playgroud)
我认为这应该导致MessageBox显示"TBase"然后"TDerived".但事实并非如此.当上面的代码运行时,它只会导致一个MessageBox显示"TDerived".
我试图通过PHP列出数据库表中的所有条目.
这是db的预览:

这是我的PHP代码:
<?PHP
include('config.php');
$db_found = mysql_select_db($dbase, $db_handle);
if ($db_found)
{
$xSQL = "SELECT * FROM Logins";
$result = mysql_query($xSQL);
while ($db_field = mysql_fetch_assoc($result))
{
echo $db_field['Username'] . ":" . $db_feild['Password'] . '<br />';
}
}
else
{
print "Database NOT Found ";
mysql_close($db_handle);
}
?>
Run Code Online (Sandbox Code Playgroud)
以下是最终结果:

我希望结果显示:
用户名2:密码1
USERNAME1:密码1
我错过了我的代码中的错误,如果有的话.任何帮助表示赞赏.
delphi ×4
delphi-7 ×2
fasm ×2
assembly ×1
class ×1
database ×1
dll ×1
dllimport ×1
download ×1
file-exists ×1
inheritance ×1
line-breaks ×1
messagebox ×1
php ×1
phpmyadmin ×1
split ×1
winapi ×1
wininet ×1