如何在 Visual Works 中获取 CPointer 的值
How to get the value of a CPointer in Visual Works
以下 C 函数在 Visual Works 中填充 C 结构(工作正常):
<C:int ssh_pki_import_pubkey_file (const char * filename, VOID * pkey)>
现在第二个函数定义为:
int ssh_userauth_try_publickey (ssh_session session, const char * username, const ssh_key pubkey)
在 Smalltalk 中:
<C:int ssh_userauth_try_publickey (VOID session, const char * username, const VOID pubkey)>
如果我使用第一个函数 (ssh_pki_import_pubkey_file
) 的填充参数(没有转换)调用第二个函数 (ssh_userauth_try_publickey
),它会失败。
所以 VOID * pkey
必须匹配 const VOID pubkey
.
在GemStone/S中这是用#'&ptr'
和#'ptr'
完成的,所以#'&ptr'
会得到指针的值(CPointer 的值将在 return 上传递和更新)。
正在阅读 DLL & C Connect 用户指南 尚未产生结果。
简答
在第一个函数中使用 void**,在第二个函数中使用 void*
长答案
在 C 语言中,void
表示“无”,如果您有 return 类型的 void,则表示您没有 return 任何内容。
但是 void*
意味着指向任何东西的指针(......我知道)......基本上你会得到一个指向你不知道它是什么的东西的指针。但它仍然是一个指针,不是什么都没有。
如果您有一个函数不是通过 return 而是通过参数产生值,您需要传递一个指针,以便该函数可以设置它的值。您可以通过 void* 做到这一点,但这是无意的。考虑以下 错误的 C 代码:
void var;
myFunc(&var);
myFunc
会采用 void* 作为参数来填充其值,但是 void 类型的变量是错误的,因为它的值是多少。在正确的 C 中,你会这样做:
void* var = NULL;
myFunc(&var);
这里var
的类型明显是一个指针,它的值甚至被初始化了。对于 myFunc
这里没有真正的区别,除了它现在有一个 void**
作为参数。
因此,如果您将 ssh_pki_import_pubkey_file
的声明修改为具有 void** 参数并将 ssh_userauth_try_publickey
的声明更改为接受 void*
参数,您应该没问题。
以下 C 函数在 Visual Works 中填充 C 结构(工作正常):
<C:int ssh_pki_import_pubkey_file (const char * filename, VOID * pkey)>
现在第二个函数定义为:
int ssh_userauth_try_publickey (ssh_session session, const char * username, const ssh_key pubkey)
在 Smalltalk 中:
<C:int ssh_userauth_try_publickey (VOID session, const char * username, const VOID pubkey)>
如果我使用第一个函数 (ssh_pki_import_pubkey_file
) 的填充参数(没有转换)调用第二个函数 (ssh_userauth_try_publickey
),它会失败。
所以 VOID * pkey
必须匹配 const VOID pubkey
.
在GemStone/S中这是用#'&ptr'
和#'ptr'
完成的,所以#'&ptr'
会得到指针的值(CPointer 的值将在 return 上传递和更新)。
正在阅读 DLL & C Connect 用户指南 尚未产生结果。
简答
在第一个函数中使用 void**,在第二个函数中使用 void*
长答案
在 C 语言中,void
表示“无”,如果您有 return 类型的 void,则表示您没有 return 任何内容。
但是 void*
意味着指向任何东西的指针(......我知道)......基本上你会得到一个指向你不知道它是什么的东西的指针。但它仍然是一个指针,不是什么都没有。
如果您有一个函数不是通过 return 而是通过参数产生值,您需要传递一个指针,以便该函数可以设置它的值。您可以通过 void* 做到这一点,但这是无意的。考虑以下 错误的 C 代码:
void var;
myFunc(&var);
myFunc
会采用 void* 作为参数来填充其值,但是 void 类型的变量是错误的,因为它的值是多少。在正确的 C 中,你会这样做:
void* var = NULL;
myFunc(&var);
这里var
的类型明显是一个指针,它的值甚至被初始化了。对于 myFunc
这里没有真正的区别,除了它现在有一个 void**
作为参数。
因此,如果您将 ssh_pki_import_pubkey_file
的声明修改为具有 void** 参数并将 ssh_userauth_try_publickey
的声明更改为接受 void*
参数,您应该没问题。