如果我要在一个文件中调用另外一个文件数组结构体的值,并且这个数组结构体还有一个数组结构体,这怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我要在一个文件中调用另外一个文件数组结构体的值,并且这个数组结构体还有一个数组结构体,这怎么办相关的知识,希望对你有一定的参考价值。

这是我在需要调用此结构体数据的文件里的声明
static extern struct ST_IPPBX_PROC_TIME_STAT gastProcTimeStat[10];
这是我在**.h中的定义
typedef struct

unsigned long ulStart; /*开始时间*/
unsigned long ulEnd; /*截止时间*/
unsigned short usTimeLen; /*时间长度*/
ST_IPPBX_MAINLOOP_TIME_STAT stIppbxTimeStat[2]; /*处理各个时间统计*/
ST_IPPBX_PROC_TIME_STAT;

其中ST_IPPBX_MAINLOOP结构体也在此文件中定义

用预处理命令,将数组结构体所在的文件,包含进来。如
#include "数组结构体所在的文件"追问

预处理命令只能把这个结构体的定义掉进来 但是我在另外一个文件中求的的值呢?

追答

预处理命令只能把这个结构体的定义掉进来 ,实际上等同于在本文件中定义。

追问

是啊 但是我辛辛苦苦求得的数据呢,他不会跟着预处理命令一起调过来啊,对把?

追答

哈哈,你想这样呀,那最好先保存到文本文件里,然后在第二个文件中再读取出来。

追问

额 这有点麻烦 我刚毕业出来工作 如何保存 如何调用?请指教!
先说一下 我是用linux c 编的程序 如果你没用过linux c 就请您用c指导一下 谢谢!

参考技术A 该文件定义
extern ...;追问

不行 出现错误
multiple storage classes in declaration of '结构体名'
storage size of '结构体里面的结构体名' isn't known
先说一下 我的是数组结构体 结构体里面也是数组结构体

追答

前面不要static

追问

额 这跟static 没有关系吧!? 为什么您说不要static?

追答

ST_IPPBX_MAINLOOP定义要放到这个结构体前面

Delphi调用Dll返回结构体的问题?

C写的一个动态库,其中有些函数的返回值为结构体(非指针),然后在Delphi里调用,得到的返回结果是错误的。
例如,在C里面:
结构体:
typedef struct uv_buf_t
ULONG len;
char* base;
uv_buf_t;
导出的函数:
uv_buf_t uv_buf_init(char* base, unsigned int len)
uv_buf_t buf;
buf.base = base;
buf.len = len;
return buf;

在Delphi里:
对应C的结构体:
uv_buf_t = record
len: ULONG;
base: PAnsiChar;
end;
函数声明为:
uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t;
在Delphi中调用:
procedure test2;
var
buf: uv_buf_t;
s: PAnsiChar;
begin
s := 'abcde';
buf := uv_buf_init(@s, 5);
Writeln('buf的值:len=' + IntToStr(buf.len) + ' base=' + buf.base);
end;
最终的结果是错误的,而且会导致传到C中的参数的值也不对,如果把C库中函数的返回值和Delph声明函数的返回值都改为指针就一点问题都没有,但是我们是不能动C代码的,只能接收返回的结构体,不知哪位高手有解决办法或思路,在此先谢过了。
uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t; cdecl;
调用约定都试过了,还是不行。

那就看你的结构体和传参是否正确了,你光这样瞎说,没人看的出问题。起码关键代码和大致错误贴出来. 参考技术A uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t;stdcall;

追问

调用约定都试过了,还是不行。这个也试过了的,不行。

追答buf^ := uv_buf_init(@s, 5);  //试试

追问

这样也不行的。

追答//定义
uv_buf_t = record
    len: ULONG;
    base: PAnsiChar;
  end;
puv_buf_t= ^uv_buf_t;  

//函数
var ppi:puv_buf_t
begin
   ppi :=allocmem(sizeof(uv_buf_t));
   ....
   ....
   ....
end;

本回答被提问者和网友采纳

以上是关于如果我要在一个文件中调用另外一个文件数组结构体的值,并且这个数组结构体还有一个数组结构体,这怎么办的主要内容,如果未能解决你的问题,请参考以下文章

c语言一个结构体如何在多个源文件里面调用?

Swift中结构体的方法调度&内存分区

函数可以返回结构体的原因

c语言中怎样通过索引获取结构体成员的值

循环和结构数组时打印的值不正确

Swift 结构体的使用