【已解决】请教:DllCall使用问题
本帖最后由 ppsfxn 于 2012-3-27 10:18 编辑想使用crypt32.dll中的CryptProtectData函数进行字符串加密,函数定义如下:BOOL WINAPI CryptProtectData(
DATA_BLOB* pDataIn,
LPCWSTR szDataDescr,
DATA_BLOB* pOptionalEntropy,
PVOID pvReserved,
CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct,
DWORD dwFlags,
DATA_BLOB* pDataOut
);BLOB定义如下:DATA_BLOB{
LONG cbData;
BYTE *pbData
}C语言中的调用如下:(CryptProtectData(&DataIn,L"password", // A description string
//to be included with the
// encrypted data.
NULL, // Optional entropy not used.
NULL, // Reserved.
NULL, // Pass NULL for the
// prompt structure.
0,
&DataOut))AU3调用代码如下:
Local $str = "long var1; char var2" ;模拟DATA_BLOB结构体,创建输入和输出参数
Local $in = DllStructCreate($str)
Local $out = DllStructCreate($str)
;给输入参数赋值
DllStructSetData($in, "var1", 3)
DllStructSetData($in, "var2", "test")
;调用 dll
$result = DllCall("crypt32.dll", "BOOL", "CryptProtectData", "ptr", DllStructGetPtr($in), "wstr", "desc", "ptr", "NULL", "ptr", "NULL", "ptr", "NULL", "DWORD", 0, "ptr", DllStructGetPtr($out))
MsgBox(0,DllStructGetData($out, 1), DllStructGetData($out, 2))
问题:DllStructGetData($out, 2)应该要返回加密后的字符串,但总返回空值,不知道哪里出了错,请大虾们指点
@error返回0,应该是参数出现了问题。
新手,对dllcall参数很是迷惑,对带指针、结构体的参数更是迷惑。。。 #include <lsasecur.au3>
Local $sPlainText = StringToBinary("Hello world~", 2)
Local $bEncrypt= _SeProtectData($sPlainText)
MsgBox(0, "Encrypted", $bEncrypt)
Local $bDecrypt = _SeUnprotectData($bEncrypt)
MsgBox(0, "Decrypted", BinaryToString($bDecrypt, 2)) 非常非常感谢!!!
AutoIt真是太神奇了~~~ 非常非常感谢!!!
AutoIt真是太神奇了~~~ 还是想知道DllCall怎么用。。。 还是想知道DllCall怎么用。。。 不错,学习了,谢谢! 楼主,你下一个lsasecur.au3去研究吧,里面有的。 回复 8# shqf
嗯嗯,刚发现,正在看 怎么把贴子弄到已解决区呢?哪里可以设置主题分类为已解决{:face (382):} 学习...我连想到的问题都不会.... autoit 和其他程序变量传递的时候 涉及指针是不是一定要用struct? 然后getptr获得指针吗?
页:
[1]