- 主题: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.*
我想适度简化问题,可能问题没说清楚
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.*
是的,就是ecat的
非常感谢
【 在 foliver 的大作中提到: 】
: b有还有其他人在使用和改写吧。多线程的话。告诉你一个测试大法,在update直接延时sleep个 10ms左右再次打印。多次测试下,看看有没有变化。
: 这段代码好像ecat的啊。
: --来自微水木3.5.10
: ...................
--
修改:jingjm FROM 123.113.252.*
FROM 123.113.252.*
感谢回复
我打印了指针地址看过,地址是同一个地址
我用其他方法解决了我的问题
但是这个直接的问题本身尚未解决
我现在怀疑问题和调用c静态库和线程竞争有关系
我尝试了加锁还是不行
【 在 poggy 的大作中提到: 】
: 现象:
: 函数内赋值成功
: 在函数外再查看,发现赋值丢失
: ...................
--
FROM 123.113.252.*