本帖最后由 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[2048]" ;模拟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参数很是迷惑,对带指针、结构体的参数更是迷惑。。。 |