
既然传入参数是地址,那你应该传入地址。。。
IPCAST_GetTermStatus(abuffer[0], @ptermsta);
声明也不对
pTerm:LPTermAttr 应该改为 delphi里的指针声明
pTerm:TermAttr (TermAttr = ^LPTermAttr; )
还有一点是,你delphi的结构体和c++的那个大小并不一致,最后三个属性肯定不准
C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。
函数说明:
#include <stdioh>
size_t fread(void ptr, size_t size, size_t nmemb, FILE stream);
从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。
如,有如下结构体定义:
typedef struct TEST
{
int num;
double score;
}STRTEST;
STRTEST data ;
FILE fp = fopen("filedat", "rb" ) ; //按二进制格式打开文件
int n=fread( &data, sizeof(STRTEST), 1, fp ); //读取一个数据块到变量data中。
注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。
因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。
第一种写法:
(a)p=&b;
的优先级高于,(pointer)两边的括号不能少。如果去掉括号写作pointermemberName,那么就等效于(pointermemberName),这样意义就完全不对了。
第二种写法:
a->p=&b;
->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。
结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量。
扩展资料:
用指针引用结构体变量成员方式总结与技巧:
一、(指针变量名)成员名
注意,p 两边的括号不可省略,因为成员运算符“”的优先级高于指针运算符“”,所以如果 p 两边的括号省略的话,那么 pnum 就等价于 (pnum) 了。
因为指针变量 p 指向的是结构体变量第一个成员的地址,即字符数组 name 的首地址,所以 p 和 (p)name 是等价的。
“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct 型的,而 (p)name 是 char 型的。所以在 strcpy 中不能将 (p)name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (p)name 而不能写成 p。
二、直接用:指针变量名->成员名
来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。
参考资料来源:百度百科-结构体
#include<stdioh>
struct fa
{
int number;
char name[20];
char sex;
int age;
float score;
};
int main()
{
struct fa a[1]={1001,"lee",'m',25,903};
struct fa q;
q=&a[0];
printf("Number=%d\n",(q)number);
printf("Name=%s\n",(q)name);
printf("Sex=%c\n",(q)sex);
printf("Age=%d\n",(q)age);
printf("Score=%f\n",(q)score);
}
简单的就是这样。先定义结构体,然后给机构体进行赋值,把结构体的地址存储到指针。最后通过指针输出结构题的数据
#include <stdioh>
struct list//建立list结构体
{
char data;
struct list next;//建立list结构体指针
};
struct list creat()//新建list结构体函数
{
struct list h,p,q;//声明结构体指针
char ch;
h=(struct list)malloc (sizeof(struct list));
//malloc 使用时要强制转化新申请的堆内存存储数据类型
//sizeof(struct list)计算需要分配的字节数
p=q=h;//没有数据时,头尾指针指向同一个地方
ch=getchar();
while(ch!='')//如果输入的不是?
{
p=(struct list)malloc (sizeof(struct list));
//给新输入的数据分配堆内存
p->data=ch;
//把ch存入新分配的堆内存内(p所指向的内存)
q->next=p;
//前一个分配的内存的next指针,指向新分配的内存
q=p;
//将前一个结构体指针转化为当前的指针
ch=getchar();
//循环输入
}
p->next='\0';
//如果P指向尾
return h;
//返回头指针
}
以上就是关于DELPHI 怎样调用 C++封装的DLL 结构体指针并取回数据全部的内容,包括:DELPHI 怎样调用 C++封装的DLL 结构体指针并取回数据、C语言对结构体文件的读取、C语言结构体指针成员所指向的变量如何访问等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)