DLL返回自定义结构的数组
Txml.h 自定义了结构体 与对应的类
CHOICE_STYLE_OTHER,
CHOICE_STYLE_TEXT,
CHOICE_STYLE_IMG
}ChoiceStyle;
typedef struct {
char CIID;
ChoiceStyle EnumChoiceStyle;
char ChoicePath[MAXPATH];
char ChoiceContent[MAXQCONTENT];
}ChoiceItem;
typedef struct {
char QID[MAXID];
char QContent[MAXQCONTENT];
char ContentAudio[MAXPATH];
ChoiceItem ChoiceItemA;
ChoiceItem ChoiceItemB;
ChoiceItem ChoiceItemC;
ChoiceItem ChoiceItemD;
char Answer[1];
}QuestionItem;
class Txml
{
public:
Txml();
~Txml();
private:
QuestionItem QuestionItemArray[MAXARRAYSIZE];
int QuestionItemArraySize;
public:
int LoadXml(const char *XmlFilePath);
QuestionItem QueryQuestionbyID(char *ID);
QuestionItem* QueryQuestionArray();
};
Txml.cpp
{
//加载XmlFilePath
//将其读到QuestionItemArray中
}
{
//注意返回的是数组名(地址)
//此前犯错,返回第一个元素QuestionIte[0]
return QuestionItemArray;
}
DLL实现如下:
MyDLL.h
MyDLL.cpp
{
QuestionItem *QuestionItemP;
Txml *objTxml= new Txml();
objTxml->LoadXml(FileName);
QuestionItemP = (objTxml->QueryQuestionArray());
return QuestionItemP;
}
应用层调用的核心部分:
void CMyExam2Dlg::LoadTXml(const char *szXmlFileToSave)
{
typedef void* (*pFillQuestionItem)(const char* FileName);
HINSTANCE HDLL; //定义句柄
pFillQuestionItem FillQuestionItem;
HDLL=LoadLibrary(MyDLLPath);
//加载动态链接库FIRSTDll.dll文件,注意指明FIRSTDLL的地址哦
if(HDLL==NULL)
::OutputDebugString("cannot find the dll file");
int my_int = *(int*)GetProcAddress(HDLL, "nMyDLL");
FillQuestionItem=(pFillQuestionItem)GetProcAddress(HDLL,"FillQuestionItem");
QuestionItem *QuestionItemP;
QuestionItem QuestionItemP1[10];
QuestionItemP=(QuestionItem*)FillQuestionItem(szXmlFileToSave );
memcpy(QuestionItemP1, QuestionItemP, sizeof(QuestionItem) * 10);
FreeLibrary(HDLL);//卸载MyDll.dll文件;
}
自定义的xml结构
- <resource id="20110512171112">
- <Question id="0">
<Content>1</Content>
<ContentAudio>.\01.mp3</ContentAudio>
<Choice STYLE="TEXT">a</Choice>
<Choice STYLE="TEXT">b</Choice>
<Choice STYLE="TEXT">c</Choice>
<Choice STYLE="TEXT">d</Choice>
<Answer>B</Answer>
</Question>
- <Question id="1">
<Content>2</Content>
<ContentAudio>.\02.mp3</ContentAudio>
<Choice STYLE="TEXT">2</Choice>
<Choice STYLE="TEXT">2</Choice>
<Choice STYLE="TEXT">2</Choice>
<Choice STYLE="TEXT">2</Choice>
<Answer>B</Answer>
</Question>
......
repeat more 8 times
</resource>
PS:
感谢师傅指导.
DLL返回自定义结构的数组相关推荐
- c语言调用dll实例 结构体传参,Matlab调用Dll,对于自定义结构体数组如何传参? - 程序语言 - 小木虫 - 学术 科研 互动社区...
%[例子1] % Matlab调用DLL,整形数组传参 v = [1,22,33;44,-56,67]; pv = libpointer('int16Ptr',v); m = get(pv,'Valu ...
- 托管代码C#调用非托管C++ API, 封送嵌套结构体数组
一.前言: 最近这两天由于项目需要,提供给客户的C++ 动态库需要返回自定义结构体数组,网上也查了很多资料, 推荐一本书, <精通.NET互操作:P/Invoke.C++ Interop和COM ...
- C#调用C++DLL传递结构体数组的终极解决方案
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...
- c oracle udt,c#调用Oracle UDT自定义结构数组类型源代码
[实例简介] c#调用Oracle UDT自定义结构数组类型源代码 [实例截图] [核心代码] ffa2062d-cc85-43bf-9aeb-2cf440e254c3 └── vsstart └── ...
- C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。
1. 题目 请编写一个函数void function(Student a[], int n, Student *s),其功能时:已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中 ...
- C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分
4 C语言编程题--结构体 **设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有 ...
- C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。
已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...
- C语言自定义数据类型(二)使用结构体数组
一个结构体变量中可以存放一组有关联的数据(如一个学生的学号.姓名.成绩等数据).如果有 10 个学生的数据需要参加运算,显然应该用数组,这就是结构体数组.结构体数组与以前介绍过的数值型数组的不同之处在 ...
- 【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )
文章目录 一.二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) 二.完整代码示例 一.二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) 博客 [C 语言]二级指针案例 ( ...
最新文章
- Android include 标签
- kali2020.1正确安装下载中文输入法及问题解决
- 孙鑫VC++课程中用到的函数一览
- 单片机原理及其应用——单片机控制按键依次点亮8只发光二极管
- most recent call last 报错_视频|救援情景剧、创意快闪……400w+人次为重庆这场消防宣传活动打call...
- Echarts笔记-折线图定制(Y轴百分数,鼠标移动显示百分数,显示X轴,Y轴值)
- mac 10.13 配置 php,MacOS10.13.6 升级后 PHP7.3配置
- Hbase完全分布式高可用集群安装配置
- 尝试使用Java6API读取java代码
- RedHat Linux安装Informix v10.x(图文详解)
- linux ifort编译命令,[转载][Linux] icc与ifort编译器
- 中国电信与阿里巴巴签署全面战略合作协议
- 人口普查数据有疑问???
- numpy.loadtxt() 详细用法
- 云服务(腾讯云)的安全防范措施
- 借记卡、贷记卡叫法的由来
- 我的形码输入法[C语言] 之一:输入法的字词编码
- Autodesk的照片建模云服务—Autodesk ReCap 360 photo 的测试数据
- 对话哈希未来贾英昊:资产上链的第一性原理 |链捕手
- “希希敬敬对”队软件工程第九次作业-beta冲刺第二次随笔