尝试使用FFidl在TCL中使用crypt32.dll,但未成功
我使用了一些代码表单,但我认为它可能与传递数据有关,而FFidl数据类型不支持它尝试使用FFidl在TCL中使用crypt32.dll,但未成功,tcl,Tcl,我使用了一些代码表单,但我认为它可能与传递数据有关,而FFidl数据类型不支持它 package require Ffidl set handle [ffidl::symbol [file join C:/ Windows System32 crypt32.dll] CryptProtectData] ffidl::callout CryptProtectData_callout {pointer-utf8 pointer-utf8 pointer-utf8 pointer-utf8 p
package require Ffidl
set handle [ffidl::symbol [file join C:/ Windows System32 crypt32.dll] CryptProtectData]
ffidl::callout CryptProtectData_callout {pointer-utf8 pointer-utf8 pointer-utf8 pointer-utf8 pointer-utf8 int pointer-utf8} int $handle stdcall
proc CryptProtectData {data} {
set value ""
if [CryptProtectData_callout $data NULL NULL 0 NULL 0 $value] {
puts $value
} else {
puts "crypt returned 0: $value"
return {}
}
}
CryptProtectData "hello how are you"
它是如何失败的?错误消息说什么?你必须定义这种类型。我一直在使用API监视器查看错误,当我将调用更改为{pointer obj int pointer obj}时,API不会抛出任何错误,但它只解密任何加密的前两个字符。看起来cbData在加密时只传递两个字节,因此在检索时只返回两个字节。我将尝试通过定义Johannes所述的类型来解决这个问题。无法为数据块定义: