c#调用C++的传结构体数组指针的问题

问题描述

C++的原型函数:CRTEXPORTCOURT_RECORD_RESCALLBACKCourtRecordGetKeyValue(COURT_PARAM_KEYkey,void*data);typedefenumCOURT_PARAM_KEY{KEY_MERGE_MAP,KEY_OUTPUT_MAP};data是根据不同的key来传入不同的结构体数组;现我用C#调用如下写法:[DllImport("CourtRecord.dll")]publicstaticexternCOURT_RECORD_RESCourtRecordSetKeyValue(COURT_PARAM_KEYkey,IntPtrdata);定义结构体[StructLayout(LayoutKind.Sequential)]publicstructOUTPUT_MAP_PARAM{publicintnInternalChannel;publicintnOutStreamPos;};#region//TODO:读取数据库设置合成关系//CourtRecordSetKeyValueList<Tuple<int,string>>merge=DataAccess.Biz.Screen.GetScreenInfo(CourtID);MERGE_MAP_PARAM[]mergepara=newMERGE_MAP_PARAM[6];for(inti=0;i<merge.Count;i++){mergepara[i].nInternalChannel=merge[i].Item1;mergepara[i].nMergePos=Convert.ToInt32(merge[i].Item2);}IntPtr[]ptArr1=newIntPtr[1];ptArr1[0]=Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MERGE_MAP_PARAM))*6);IntPtrpt1=Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MERGE_MAP_PARAM)));Marshal.Copy(ptArr1,0,pt1,1);CourtRecordSetKeyValue(COURT_PARAM_KEY.KEY_MERGE_MAP,pt1);//调用方法#endregion可是这样调用方法不会报错,但是结构体的值却改变了。

解决方案

时间: 2024-08-12 12:24:57

c#调用C++的传结构体数组指针的问题的相关文章

c++-怎么在一个结构体里调用本身结构体数组

问题描述 怎么在一个结构体里调用本身结构体数组 typedef struct XML_DATA{ struct XML_DATA DATA[10]; char MENU[10][256]; ezxml_t xml; char *txt; char *strAttr; char *file; };XML_DATA m_data[10]; 这样使用为什么会报错,应该怎么修改?谢谢大家帮忙看看咯. 解决方案 定义变量要使用:struct XML_DATA m_data[10];要不就要改结构体的定义,

C语言 结构体和指针详解及简单示例_C 语言

指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1 = { "Tom", 12, 18, 'A', 136.5 }; //结构体指针struct stu *pstu = &stu1; 也可以在定义结构体的同时定义结构

C#调用c++ dll 封送结构体数组,无法成功

问题描述 C#调用c++ dll 封送结构体数组,无法成功 c++代码: class qf { private: char *id; char *mc; float sd; int LX; }; 函数:int EntryPoint(qf *qfw); c#代码: public class qf { private string id; private string mc; private float sd; private int LX; }; c#调用: qf[] qfw = new qf[2

struct-关于结构体指针与结构体数组

问题描述 关于结构体指针与结构体数组 目前开发遇到一个问题,有一个动态库dll,需要传进去一个结构体数组,函数为 opt_api_init(InfoInitMarket* InitMarketInfo): 这个是结构体 typedef struct tagInfoInitMarket { char commID[COMMODITY_ID + 1]; //合约编码 char classID[CLASS_ID + 1]; //品种代码 char instrumentType; //合约类型:期货:F

结构体数组的定义和引用(三)

第七步,定义m a i n ( )函数,列出完整的程序清单.#include #include struct stu{char name[20];long number;float score[4];} ;m a i n ( ){void input(); / *函数声明* /void aver();void order();void output();void out_row();struct stu stud[4]; / * 定义结构体数组* /float row[3];i n p u t

结构体数组的定义和引用(二)

第四步,按平均成绩排序,排序算法采用冒泡法.void order(arr,n)struct stu arr[];int n;{ struct stu temp;int i,j,x,y;f o r ( i = 0 ; i < n - 1 ; i + + )f o r ( j = 0 ; j < n - 1 - i ; j + + )if (arr[j].score[3]>arr[j+1].score[3]){ temp=arr[j]; /结*构体类型变量不允许以整体输入或输出,但允许相互赋

c++-C++ 6.0按照结构体数组中多个字段的排序

问题描述 C++ 6.0按照结构体数组中多个字段的排序 用系统库函数怎么实现?传函数指针么?但是多个条件没办法传函数指针的,用冒泡排序行么 解决方案 自己写一个比较器,作为参数传给qsort 大概的写法 if (a.字段1 == b.字段1) return a.字段2 - b.字段2; return a.字段1 - b.字段1; 解决方案二: 楼主还不如自己写一个来的好 解决方案三: 在丁一结构体里面定义bool operator <

c++-请问一个MFC结构体数组的问题

问题描述 请问一个MFC结构体数组的问题 INPUT iput[1]; memset(iput, 0, 1 * sizeof(INPUT)); iput[0].type = INPUT_KEYBOARD; iput[0].ki.wVk = VK_ESCAPE; SendInput(1, iput, sizeof(INPUT)); 如果第一句改成INPUT iput;的话 最后一句的第二个参数前面要加上取地址,请问这是为 什么呀? 解决方案 INPUT iput[1];是一个数组类型,存储相关内容

C++第2周项目2——读取数据到结构体数组

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8635385 [项目2-读取数据到结构体数组]score.txt(从本文后粘贴自建)中是一些同学的学号.姓名.C++.高数.英语成绩,定义一个学生成绩的结构体数组,其中的成员包括学号(char num[12]).姓名(name).三门课的成绩(grade).总分