相关疑难解决方法(0)

如何以编程方式在OpenSSL中加载PKCS#12文件?

在基于OpenSSL的SSL服务器应用程序中,我们如何以编程方式加载PKCS#12文件?

另外,我可以在OpenSSL的同一文件中加载具有证书,密钥和CA的PKCS#12文件吗?

c ssl openssl pkcs#12

14
推荐指数
1
解决办法
2万
查看次数

Common Lisp CFFI:指向指针的指针

我正在尝试为Sundials CVODE库编写CFFI包装器.SWIG对Sundials标题感到窒息,因为它们相互关联,SWIG找不到正确的标题,所以我手工完成:有点费力,但我已经管理好了.

现在我正在尝试测试它是否正常工作.现在,只需创建"问题对象"并删除它.这就是问题开始的地方.因此,"问题对象"是通过函数分配的

SUNDIALS_EXPORT void *CVodeCreate(int lmm, int iter);
Run Code Online (Sandbox Code Playgroud)

为此我创建了包装器:

(cffi:defcfun "CVodeCreate" :pointer
  (lmm :int)
  (iter :int))
Run Code Online (Sandbox Code Playgroud)

PS.SUNDIALS_EXPORT(至少在Unix上)基本上没什么.

现在,为了销毁对象,Sundials使用它自己的功能:

SUNDIALS_EXPORT void CVodeFree(void **cvode_mem);
Run Code Online (Sandbox Code Playgroud)

所以,我需要将它的引用传递给它CVodeCreate.在C中,如果我的记忆没有错,我会做类似的事情CVodeFree(&problem_object).在CL我写了这个函数的包装器:

(cffi:defcfun "CVodeFree" :void
  (cvode-mem :pointer))
Run Code Online (Sandbox Code Playgroud)

所以,这COVDE-MEM是一个指向指针的指针.问题是如何在CL/CFFI中获取指针的指针?这是代码的开头:

(defvar *p* (cvodecreate 1 2))
Run Code Online (Sandbox Code Playgroud)

(PS.不要​​担心传递的数字CVODECREATE,他们只是告诉使用哪些方法,仍然需要定义常量以使其更具可读性)

所以*P*是一样的东西

#.(SB-SYS:INT-SAP #X7FFFE0007060)
Run Code Online (Sandbox Code Playgroud)

如果我直接传递给它CVODEFREE,它最终会出错:

CL-USER> (cvodefree *p*)
; Evaluation aborted on #<SIMPLE-ERROR "bus error at #X~X" {1005EC9BD3}>.
Run Code Online (Sandbox Code Playgroud)

我试过传递,(CFFI:POINTER-ADDRESS *P*)但它导致类似的"总线错误......"(甚至不确定此函数是否返回我需要的).我也尝试过(CFFI:MAKE-POINTER (CFFI:POINTER-ADDRESS *P*)),再一次没有任何成功.

这个问题暗示了这种方法:

(cffi:with-foreign-object …
Run Code Online (Sandbox Code Playgroud)

pointers common-lisp cffi

5
推荐指数
1
解决办法
778
查看次数

标签 统计

c ×1

cffi ×1

common-lisp ×1

openssl ×1

pkcs#12 ×1

pointers ×1

ssl ×1