打印
[实用程序源码及工具软件]

lisp语言调用动态链接库DLL例程源码(独家在21ic发表)

[复制链接]
119|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2023-9-19 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2023-9-20 09:40 编辑
(use-package "FFI")
(default-foreign-language :stdc)

(def-call-out PEA256Init (:name "PEA256Init")
  (:return-type boolean)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Test (:name "PEA256Test")
  (:return-type boolean)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Version (:name "PEA256Version")
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Error (:name "PEA256Error")
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Open (:name "PEA256Open")
  (:return-type c-pointer)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Close (:name "PEA256Close")
  (:arguments (handle c-pointer))
  (:return-type)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptUserKey (:name "PEA256EncryptUserKey")
  (:arguments (handle c-pointer) (keystr c-string) (keybuff c-string) (keyfile c-string))
  (:return-type uint)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptUserKey (:name "PEA256DecryptUserKey")
  (:arguments (handle c-pointer) (keystr c-string) (keybuff c-string) (keyfile c-string))
  (:return-type uint)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBytes (:name "PEA256EncryptBytes")
  (:arguments (handle c-pointer) (bytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBytes (:name "PEA256DecryptBytes")
  (:arguments (handle c-pointer) (bytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBytesEx (:name "PEA256EncryptBytesEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBytesEx (:name "PEA256DecryptBytesEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptArrayEx (:name "PEA256EncryptArrayEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (index uint32) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptArrayEx (:name "PEA256DecryptArrayEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (index uint32) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBufferEx (:name "PEA256EncryptBufferEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (in_index uint32) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (out_index uint32) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBufferEx (:name "PEA256DecryptBufferEx")
  (:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (in_index uint32) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (out_index uint32) (len uint32) (subkey uint32))
  (:return-type uint32)
  (:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))


(if (PEA256Init)
  (progn
    (format t"PEA256Init成功!!!~%")
    (PEA256Test)
    (setq version (PEA256Version))
    (format t"subkey = ~08X~%" version)
    (setq handle (PEA256Open))
    (write handle)
    (terpri)
    (if nil(handle)
    (progn
    (setf Array (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
    (setf ArrayEncrypt (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
    (setf ArrayDecrypt (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
    (dotimes (i (length Array))
      (setf (aref Array i) i)
      (setf (aref ArrayEncrypt i) i)
    )
    (setq subkey (PEA256EncryptUserKey handle "123" "" ""))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256EncryptBytes handle Array 4 subkey))
    ;(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
    ;(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
    ;(setq subkey (PEA256EncryptBytesEx handle ArrayEncrypt ArrayDecrypt 4 subkey))
    ;(setq subkey (PEA256EncryptArrayEx handle ArrayEncrypt ArrayDecrypt 0 4 subkey))
    ;(setq subkey (PEA256EncryptBufferEx handle ArrayEncrypt 0 ArrayDecrypt 0 4 subkey))
    (format t"~%subkey = ~08X~%" subkey)
    (write Array)
    (terpri)
    (dotimes (i (length Array))
      (format t" ~02X" (aref Array i))
    )
    (setq subkey (PEA256EncryptBytes handle Array 4 subkey))
    (setq subkey (PEA256DecryptUserKey handle "123" "" ""))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256DecryptBytes handle Array 4 subkey))
    ;(setq subkey (PEA256DecryptBytesEx handle ArrayDecrypt ArrayEncrypt 4 subkey))
    ;(setq subkey (PEA256DecryptArrayEx handle ArrayDecrypt ArrayEncrypt 0 4 subkey))
    ;(setq subkey (PEA256DecryptBufferEx handle ArrayDecrypt 0 ArrayEncrypt 0 4 subkey))
    (format t"~%subkey = ~08X~%" subkey)
    (write Array)
    (terpri)
    (dotimes (i (length Array))
      (format t" ~02X" (aref Array i))
    )
    (setq subkey (PEA256EncryptUserKey handle "" "0123456789ABCDEF0123456789ABCDEF" ""))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256DecryptUserKey handle "" "0123456789ABCDEF0123456789ABCDEF" ""))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256EncryptUserKey handle "" "" "123.PEA.KEY"))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256DecryptUserKey handle "" "" "123.PEA.KEY"))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256EncryptUserKey handle "" "" "D:\\libpea256x64\\libpea256x64.dll"))
    (format t"~%subkey = ~08X" subkey)
    (setq subkey (PEA256DecryptUserKey handle "" "" "D:\\libpea256x64\\libpea256x64.dll"))
    (format t"~%subkey = ~08X" subkey)
    )
    ;(write "PEA256Open失败!!!")
    )
    (PEA256Close handle)
  )
  (format t"~%PEA256Init失败!!!")
)
(PEA256Error)
(format t"~%Hello World!!!")


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1538

主题

21697

帖子

505

粉丝