DELPHI 怎样调用 C++封装的DLL 结构体指针并取回数据

DELPHI 怎样调用 C++封装的DLL 结构体指针并取回数据,第1张

既然传入参数是地址,那你应该传入地址。。。

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语言结构体指针成员所指向的变量如何访问等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9778357.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存