- 主题:c++中调用c库问题
C库编译为静态库
里面有个全局变量结构a,a.outputs 为uint8 指针
static type_b b;
a.outputs = (uint8 *)b;
C++成员函数试图对a.outputs赋值, e.g.
a.outputs[2] = (unsinged char)0xff;
现象:
函数内赋值成功
在函数外再查看,发现赋值丢失
百思不得其解
请高手指点
多谢多谢
--
修改:jingjm FROM 123.113.252.*
FROM 123.113.252.*
提问题要把代码贴全。
不过我猜你使用了全局变量的副本
【 在 jingjm 的大作中提到: 】
: C库编译为静态库
: 里面有个全局变量结构a,a.outputs 为uint8 指针
: static type_b b;
: ...................
--来自微水木3.5.10
--
FROM 39.144.40.*
你这不是赋值给b了,b是个函数内静态成员?
然后在函数外面访问b发现没有值?
【 在 jingjm 的大作中提到: 】
:
: C库编译为静态库
: 里面有个全局变量结构a,a.outputs 为uint8 指针
: static type_b b;
: a.outputs = (uint8 *)b;
#发自zSMTH-v-@钛星
--
FROM 223.104.40.*
我想适度简化问题,可能问题没说清楚
C库编译为静态库
里面有个全局变量结构
slavet slave[10];
slave.outputs 为uint8 指针
typedef struct slave
{
...
uint8 *outputs;
...
}
static type_b b;
slave[0].outputs = (uint8 *)b;
以上都在C静态库中
在C++里
调用update可见赋值成功
但是再调用blink 发现赋值又丢了
extern slavet slave[10];
static void blink() {
...
for (int j = 0 ; j < 2; j++)
{
printf(" %2.2x", *(slave[0].outputs + j));
}
printf("\n");
}
void Mbslave::update(int value)
{
...
if (value != 0) {
slave[0].outputs[0] = (unsigned char)(value & 0xff);
slave[0].outputs[1] = (unsigned char)(value >> 8 & 0xff);
}
for (int j = 0 ; j < 2; j++)
{
printf(" %2.2x", *(slave[0].outputs + j));
}
printf("\n");
}
【 在 foliver 的大作中提到: 】
: 提问题要把代码贴全。
: 不过我猜你使用了全局变量的副本
: --来自微水木3.5.10
: ...................
--
FROM 123.113.252.*
看看有没哪里设置了pack
--
FROM 61.177.36.*
type_b 是什么结构?
outputs指向什么?这个代码有问题
【 在 jingjm 的大作中提到: 】
: 我想适度简化问题,可能问题没说清楚
: C库编译为静态库
: 里面有个全局变量结构
: ...................
--
FROM 223.223.185.*
slave[0].outputs[0] = (unsigned char)(value & 0xff);
slave[0].outputs[1] = (unsigned char)(value >> 8 & 0xff);
这不报warning吗, outputs只是一个指针不是数组啊
--
FROM 117.35.158.*
肯定静态库多份拷贝了,两个地方输出地址看看
--
FROM 223.104.240.*
b有还有其他人在使用和改写吧。多线程的话。告诉你一个测试大法,在update直接延时sleep个 10ms左右再次打印。多次测试下,看看有没有变化。
这段代码好像ecat的啊。
【 在 jingjm 的大作中提到: 】
: 我想适度简化问题,可能问题没说清楚
:
: C库编译为静态库
: ...................
--来自微水木3.5.10
--
FROM 124.77.82.*
是的,就是ecat的
非常感谢
【 在 foliver 的大作中提到: 】
: b有还有其他人在使用和改写吧。多线程的话。告诉你一个测试大法,在update直接延时sleep个 10ms左右再次打印。多次测试下,看看有没有变化。
: 这段代码好像ecat的啊。
: --来自微水木3.5.10
: ...................
--
修改:jingjm FROM 123.113.252.*
FROM 123.113.252.*