c#调用c++dll变量类型怎么转换?

xiongwei8888 2007-05-15 11:21:47
例如:char a;
char b[100];等.
还有以下结构在c#中该怎么定义?请高手指点.
typedef struct{
unsigned char rgbRed;
unsigned char rgbGreen;
unsigned char rgbBlue;
unsigned char rgbReserved;
}RGBCOLOR;

typedef struct tagProdParam{
char name[40];
float value;
}PRODPARAM;

typedef struct tagConfigInfo{
char m_Product[80]; //产品名称
long m_ID; //产品标识
RGBCOLOR m_Color[MAXCOLOR]; //产品色表
float m_Value[MAXCOLOR]; //色表阈值
PRODPARAM m_Param[MAXPARAM];
char m_ProcMod[40];
char m_Unit[20];
char Reserved[140];
}CONFIGINFO;
...全文
409 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongwei8888 2007-05-15
  • 打赏
  • 举报
回复
用string出错:无法声明指向它的指针.
[DllImport("processor.dll", EntryPoint = "getProdInfo", CallingConvention = CallingConvention.StdCall)]
unsafe public static extern void* getProdInfo();

unsafe public void* config;
下面事件:
config=getProdInfo();
CONFIGINFO* sy = (CONFIGINFO*)config;
运行出错!
无法获取托管类型(“radarprocessor.Form1.CONFIGINFO”)的地址和大小,或无法声明指向它的指针
wenbin 2007-05-15
  • 打赏
  • 举报
回复
char 就用 char可以
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8)]
char[] 用string
真相重于对错 2007-05-15
  • 打赏
  • 举报
回复
msdn2003
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconmarshalingdatawithplatforminvoke.htm
msdn2005
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxinterop/html/dc5c76cf-7b12-406f-b79c-d1a023ec245d.htm
xiongwei8888 2007-05-15
  • 打赏
  • 举报
回复
请教了高手,已经清楚了,结贴
xiongwei8888 2007-05-15
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Sequential)]
public struct RGBCOLOR
{
public byte rgbRed;
public byte rgbGreen;
public byte rgbBlue;
public byte rgbReserved;
};
[StructLayout(LayoutKind.Sequential)]
public struct PRODPARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public byte name;
//public string name;如果这里用string 通不过
public float value;
};
[StructLayout(LayoutKind.Sequential)]
public struct CONFIGINFO
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
//public string m_Product;-------如果这里用string 通不过
public byte m_Product;//----------public byte[] m_Product也会出错.
public long m_ID;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=100)]
public RGBCOLOR m_Color;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public float m_Value;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public PRODPARAM m_Param;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public byte m_ProcMod;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public byte m_Unit;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst =140)]
public byte Reserved;
};
高手请指点.
xiongwei8888 2007-05-15
  • 打赏
  • 举报
回复
哪个大哥帮帮我啊,帮我把上面的结构定义出来啊,谢谢啦!
smartstar2005 2007-05-15
  • 打赏
  • 举报
回复
Mark
xiongwei8888 2007-05-15
  • 打赏
  • 举报
回复
long 的类型还是long么?

111,092

社区成员

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

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

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