我在静态库中有一个 C 函数,我们称它为 A,具有以下接口:
int A(unsigned int a, unsigned long long b, unsigned int *y, unsigned char *z);
这个函数将改变 y 和 z 的值(这是肯定的)。我在动态 C++ 库中使用它,使用 extern "C"。
现在,这让我感到震惊:
- y 设置正确,z 没有改变。我的意思是,如果两者都使用(指向)值 666 进行初始化,则 y 指向的值将在调用后发生变化,但不会更改 z 指向的值(仍为 666)。
- 当从 C 二进制文件调用时,此函数可以无缝工作(修改 z 指向的值)。
- 如果我创建一个具有相同原型的函数的虚拟 C 库,并在我的动态 C++ 库中使用它,它工作得很好。如果我重新使用相同的变量来调用 A(..),我会得到与以前相同的结果,z 不会改变。
我认为以上几点表明我的变量声明并不是一个愚蠢的错误。
我显然被卡住了,我无法更改 C 库。您对可能是什么问题有任何线索吗?我正在考虑 C/C++ 接口上的一个问题,例如 char* 的解释方式。
编辑:我终于发现了问题所在。请看下面我的回答。