C++结构体与Delphi结构体相互传参,结构体中包含结构体的嵌套,数组指针
//结构体的声明
typedef struct Mwinddirectbaseline {
char* p;
int s;
int i;
}Mwinddirectbaseline;
typedef struct F {
char* p;
int s;
int i;
}F;
typedef struct H {
char* p;
int s;
int i;
}H;
typedef struct Coordinate1 {
char* p;
int s;
int i;
}Coordinate1;
typedef struct Mwinddirectbar {
F f;
H h;
}Mwinddirectbar;
typedef struct Huxianarray {
float* Params;
}Huxianarray;
typedef struct Hengxianarray {
float* Params;
}Hengxianarray;
typedef struct Windspeedline {
char* types;
Coordinate1** coordinates;
}Windspeedline;
typedef struct Resultwindspeedgrid {
int HuxianShu;
int HengxianShu;
Huxianarray* HuxianArrays;
Hengxianarray* HengxianArrays;
}Resultwindspeedgrid;
typedef struct Coordinate {
Mwinddirectbaseline *mWindDirectBaseLine;
Mwinddirectbar *mWindDirectBars;
}Coordinate;
typedef struct Winddirectline {
Coordinate* coordinates;
}Winddirectline;
//typedef struct Structtest {
// int a;
// int b;
// int* arr;
//}Structtest;
typedef struct Rootobject {
char* gridStartTime;
char* gridEndTime;
char* resultStartTime;
char* resultEndTime;
int gridMethod;
char* WindDirectBorder;
Winddirectline WindDirectLine;
char* WindSpeedBorder;
Windspeedline WindSpeedLine;
/*void* LineDateTimeRelations;
void* RatioConverts;*/
//void* 不确定类型
char* resultWindDirectGrid;
Resultwindspeedgrid resultWindSpeedGrid;
}Rootobject;
C++结构体的声明
__declspec(dllexport) Rootobject __stdcall RefRootobjectValues(char* path)
{
ifstream t(path);
Rootobject Root;
string str((istreambuf_iterator<char>(t)), istreambuf_iterator<char>());
CJsonObject Objson = CJsonObject(str);
string strsss; Objson.Get("gridStartTime", strsss);
Root.gridStartTime = ReturnCharArr(strsss); Objson.Get("gridEndTime", strsss);
Root.gridEndTime = ReturnCharArr(strsss); Objson.Get("resultStartTime", strsss);
Root.resultStartTime = ReturnCharArr(strsss); Objson.Get("resultEndTime", strsss);
Root.resultEndTime = ReturnCharArr(strsss); Objson.Get("WindSpeedBorder", strsss);
Root.WindSpeedBorder = ReturnCharArr(strsss); Objson.Get("WindDirectBorder", strsss);
Root.WindDirectBorder = ReturnCharArr(strsss); Objson.Get("resultWindDirectGrid", strsss);
Root.resultWindDirectGrid = ReturnCharArr(strsss); int nums = Objson["WindDirectLine"]["coordinates"].GetArraySize(); Root.WindDirectLine.coordinates = (struct Coordinate *)malloc(nums * sizeof(struct Coordinate));
/*Coordinate* coor=new Coordinate [nums];*/
/*由于School_T中定义的student是一个结构体指针,必须要对其进行分配内存*/
//Root.WindDirectLine->coordinates = (coordinates *)malloc(sizeof(Student_T)); for (int i = ; i < nums; i++)
{
int mWindDirectBaseLine_Length = Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBaseLine"].GetArraySize();
Root.WindDirectLine.coordinates[i].mWindDirectBaseLine = (struct Mwinddirectbaseline *)malloc(nums * sizeof(struct Mwinddirectbaseline));
for (int j = ; j < mWindDirectBaseLine_Length; j++)
{
string Str1;
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBaseLine"][j].Get("p", Str1);
Root.WindDirectLine.coordinates[i].mWindDirectBaseLine[j].p = ReturnCharArr(Str1);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBaseLine"][j].Get("i", Root.WindDirectLine.coordinates[i].mWindDirectBaseLine[j].i);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBaseLine"][j].Get("s", Root.WindDirectLine.coordinates[i].mWindDirectBaseLine[j].s);
Root.WindDirectLine.coordinates[i].mWindDirectBaseLine++;
} int mWindDirectBars_Length = Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"].GetArraySize();
Root.WindDirectLine.coordinates[i].mWindDirectBars = (struct Mwinddirectbar *)malloc(nums * sizeof(struct Mwinddirectbar));
for (int k = ; k < mWindDirectBars_Length; k++)
{
string Str2;
F f;
H h;
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["f"].Get("p", Str2);
f.p = ReturnCharArr(Str2);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["f"].Get("s", f.s);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["f"].Get("i", f.i);
Str2 = "";
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["h"].Get("p", Str2);
h.p = ReturnCharArr(Str2);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["h"].Get("s", h.s);
Objson["WindDirectLine"]["coordinates"][i]["mWindDirectBars"][k]["h"].Get("i", h.i);
Root.WindDirectLine.coordinates[i].mWindDirectBars[k].f = f;
Root.WindDirectLine.coordinates[i].mWindDirectBars[k].h = h;
Root.WindDirectLine.coordinates[i].mWindDirectBars++;
}
Root.WindDirectLine.coordinates++;
} return Root;
//strs->WindDirectLine.coordinates = coor;
//strs->WindDirectLine->coordinates = coor;
//strs->gridMethod = 50; }
C++赋值并返回
type
Huxianarray = record
Params:^ double;
end; type
Hengxianarray = record
Params:^ double;
end; type
Resultwindspeedgrid = record
HuxianShu:Integer;
HuxianArrays:^ Huxianarray;
HengxianShu:Integer;
HengxianArrays:^ Hengxianarray;
end; type
Coordinate1 = record
p:pansiChar;
s:Integer;
i:Integer;
end; type
Windspeedline = record
types:pansiChar;
coordinates:^ Coordinate1;
end; type
H = record
p:pansiChar;
s:Integer;
i:Integer;
end; type
F = record
p:pansiChar;
s:Integer;
i:Integer;
end; type
Mwinddirectbar = record
f:F;
h:H;
end;
TMyArraybar = array of Mwinddirectbar;
PMyArraybar = ^TMyArraybar; type
Mwinddirectbaseline = record
p:pansiChar;
s:Integer;
i:Integer;
end; type
Coordinate = record
// TCoordinate = record
mWindDirectBaseLine: ^Mwinddirectbaseline;
mWindDirectBars: ^Mwinddirectbar;
end; type
Winddirectline = record
coordinates: ^Coordinate;
end; type
Rootobject = record
gridStartTime:pansiChar;
gridEndTime:pansiChar;
resultStartTime:pansiChar;
resultEndTime:pansiChar;
gridMethod:Integer;
WindDirectBorder:pansiChar;
WindDirectLine:Winddirectline;
WindSpeedBorder:pansiChar;
WindSpeedLine:Windspeedline;
// LineDateTimeRelations:pointer;
// RatioConverts:pointer;
resultWindDirectGrid:pansiChar;
resultWindSpeedGrid:Resultwindspeedgrid;
end;
Delphi结构体的声明
function RetRootobjectValues(b:pansiChar;var n1:pansiChar;var mu:Integer):Rootobject;stdcall;external 'F:\资料文档\20190227\测试文件夹\Win32DLL\Debug\Win32DLL.dll'; procedure TForm5.Button4Click(Sender: TObject);
var
root:Rootobject;
path,res:pansiChar;
mu,I,hsf,hsh:Integer;
nums:Mwinddirectbaseline;
resd:Coordinate;
Mwind: Mwinddirectbaseline;
Mwbar:Mwinddirectbar;
bol,bolbar:boolean;
fs:F;
hs:H;
begin
root.gridMethod:=;
path:= pansiChar(AnsiString('E:\123.txt'));
root:= RetRootobjectValues(path,res,mu);
// resd:= root.WindDirectLine.coordinates^ ;
// Mwind:= root.WindDirectLine.coordinates^.mWindDirectBaseLine^;
// Inc(root.WindDirectLine.coordinates);
bol:=true; while(bol) do
begin
resd:= root.WindDirectLine.coordinates^ ;
try
Mwind:= root.WindDirectLine.coordinates^.mWindDirectBaseLine^;
Mwbar:= root.WindDirectLine.coordinates^.mWindDirectBars^;
fs:=Mwbar.f;
hs:=Mwbar.h;
hsf:= fs.s;
hsh:=hs.s; bolbar:=true;
mu:= Mwind.s; while((mu<>-)) do
begin
Inc(root.WindDirectLine.coordinates^.mWindDirectBaseLine); {到下一个}
Mwind:= root.WindDirectLine.coordinates^.mWindDirectBaseLine^;
mu:= Mwind.s;
end; while((hsf<>-) and (hsh<>-) ) do
begin
Inc(root.WindDirectLine.coordinates^.mWindDirectBars); {到下一个} Mwbar:= root.WindDirectLine.coordinates^.mWindDirectBars^;
fs:=Mwbar.f;
hs:=Mwbar.h;
hsf:= fs.s;
hsh:=hs.s; end;
except
begin
bol:=false;
end;
end;
Inc(root.WindDirectLine.coordinates); {到下一个}
end; // resd^:=root.WindDirectLine.coordinates;
// Mwind[0]:= resd.mWindDirectBaseLine;
// Mwbar:= resd.mWindDirectBars;
// for I := 0 to 3 do
// begin
// resd:= root.WindDirectLine.coordinates;
//
// end; ShowMessage(root.gridStartTime); end;
Delphi调用方法
其中Json文件的读取运用了C++ Json解析CJsonObject的详细使用
代码中只展示了部分参数的赋值。
如果出现读取内存地址报错的情况,在C++的ReturnRootobject方法中添加 __stdcall。
C++结构体与Delphi结构体相互传参,结构体中包含结构体的嵌套,数组指针的更多相关文章
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- C++中的结构体
http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7d ...
- C/C++中的结构体
结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 结构体作用 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成 ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- C#中的结构体与类的区别
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
- C#调用C++ dll时,结构体引用传参的方法
写了一个C++的LogLog Logit 四参数等算法的接口dll,给C#调用,但是发现传参有问题 如 extern "C" _declspec(dllexport) bool ...
- 再识C中的结构体
在前面认识C中的结构体中我介绍了结构体的基础知识,下面通过这段代码来回顾一下: #include<stdio.h> #define LEN 20 struct Student{ //定义结 ...
- 认识C中的结构体
C中结构体是另外一种表示数据形式的方式,结构体中可以表示C中的基本数据形式,如int,double....结构体可以让我们更好的表示数据.下面来看看结构体. 说到结构体首先要了解的是它的申明形式,要申 ...
- C语言中的结构体和C++中的结构体以及C++中类的区别
c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一. ...
随机推荐
- hadoop记录-如何换namenode机器
namenode机器磁盘IO负载持续承压,造成NAMENODE切换多次及访问异常. 1 初始化新机器1.1 在新器1.1.1.3部署hadoop软件(直接复制standby1.1.1.2节点)1.2 ...
- To making it count.
- How do you take your caviar, sir? 鱼子酱还要吗,先生? - No caviar for me, thanks. Never did like it much. ...
- manacher最长回文子串
https://www.luogu.org/blog/codesonic/manacheralgorithm 先放上洛谷的链接,毕竟讲的真好 两道例题 luogu4555 SP7586 inline ...
- HDU-1709 The Balance(生成函数)
题意 给$n$个数,有哪些属于$1$到$n$个数字总和$sum$的数是通过该集合任意子集之间的加减运算无法得到的. 思路 对每个数构造$x^{-a[i]}+1+x^{a[i]}$,为了避免负幂次可以将 ...
- 文件的暂存(git add)
如果我们更改了之前已经被跟踪的main.c,然后执行git status $ git status On branch master Changes not staged for commit: (u ...
- Mysql 层级、执行顺序、执行计划分析
逻辑分层 下面是MySQL的逻辑分层图: 连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理.授权认证.安全等. 服务层:包括缓存查询.解析器.优化器 ...
- cv::Mat类之type成员
CV_8UC3 -->16 CV_8UC3 表示存储元素的数据类型为 8bit unsigned char 类型,通道数C = 3 为什么OpenCV中type为CV_8UC3的图像 输出其ty ...
- 20175214 《Java程序设计》第9周学习总结
20175214 <Java程序设计>第9周学习总结 本周学习任务总结 1.根据<java2实用教程>和蓝墨云学习视频学习第十一章: 2.尝试将课本重点内容用自己的话复述手打: ...
- C#使用RabbitMQ(转)
1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地 ...
- 使用Mermaid画图
流程图的示例 时序图的示例 甘特图的示例 FAQ 很多时候,你想解释自己的想法/代码,但是用语言来表达会很啰嗦,并且读者也不易理解.一般这种情况下,我们都会想使用图解来解释.但是,我们也不会想下载那些 ...