才疏学浅,求助,C#调用C++ dll 返回结构体数组指针

朽木小凡_24K高端黑 2013-08-06 03:22:42
//C++中定义:
struct GPS_TAXI_DATA
{
int id;
int equip_id;
double cross_x;
double cross_y;
string gps_date;
double speed;
int direct;
int status;
int acc;
string rece_date;
};


_declspec(dllimport) GPS_TAXI_DATA * get_gps_data(int year,int month,int day,int hour,int min,int sec,int &GPS_Arry_Num);


C#中:
[StructLayout(LayoutKind.Sequential)]
public struct GPS_TAXI_DATA
{
[MarshalAs(UnmanagedType.I4)]
int id;
[MarshalAs(UnmanagedType.I4)]
int equip_id;
[MarshalAs(UnmanagedType.I8)]
double cross_x;
[MarshalAs(UnmanagedType.I8)]
double cross_y;
[MarshalAs(UnmanagedType.LPStr)]
string gps_date;
[MarshalAs(UnmanagedType.I8)]
double speed;
[MarshalAs(UnmanagedType.I4)]
int direct;
[MarshalAs(UnmanagedType.I4)]
int status;
[MarshalAs(UnmanagedType.I4)]
int acc;
[MarshalAs(UnmanagedType.LPStr)]
string rece_date;
};




[DllImport(@"C:\Documents and Settings\jiangbinze\桌面\test\test.dll", EntryPoint = "get_gps_data")]
public static extern GPS_TAXI_DATA[] get_gps_data(int year, int month, int day, int hour, int min, int sec, ref IntPtr GPS_Arry_Num);
public void test()
{
//这里该怎么写?
}



...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzi1325 2013-10-12
  • 打赏
  • 举报
回复
这个试着恩么解决的呢?
  • 打赏
  • 举报
回复
问题解了。不能这么传。。。ref 传这种结构体才行
  • 打赏
  • 举报
回复
UP,求高人回答
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
GPS_TAXI_DATA data = get_gps_data(xxx,xxx,xxx,xxx)
um....版主 get_gps_data最后一项是一个引用类型 返回的是结构体数组的指针。。 这么写我已经试过了,报错“无法封送处理“return value”: 无效的托管/非托管类型组合。”
bdmh 2013-08-06
  • 打赏
  • 举报
回复
GPS_TAXI_DATA data = get_gps_data(xxx,xxx,xxx,xxx)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧