C#调用C Dll怎么传结构指针啊

yangc_83 2009-07-01 03:48:58
RT
下面是C++中代码说明

long WINAPI SMS_Send_Back_By_Sync(long pAppData);//接口

typedef struct
{
char telNum[22];
int msgLen;
char content[256];
char dcs;

short sNet;
int serviceID;
int reserved;
int irecid;
int miSendType;
short Dest_Port;
short Orig_Port;
} SMS_APP_BACK_SYNC;

查了资料,我在C#中

[DllImport("SMSDLL.dll", CharSet = CharSet.Auto)]
public static extern int SMS_Send_Back_By_Sync(IntPtr pAppData);

public struct SMS_APP_BACK_SYNC
{
public char[] telNum;
public int msgLen;
public char[] content;
public char dcs;

public Int16 sNet;
public int serviceID;
public int reserved;
public int irecid;
public int miSendType;
public Int16 Dest_Port;
public Int16 Orig_Port;
}
public static void sendTo()
{
SMS_APP_BACK_SYNC pAppData1= new SMS_APP_BACK_SYNC();
IntPtr pAppData = Marshal.AllocHGlobal(Marshal.SizeOf(pAppData1));
Marshal.StructureToPtr(pAppData1, pAppData, false);

pAppData1 = Marshal.PtrToStructure(ptr, typeof(SMS_APP_BACK_SYNC));

char[] tempTelNum = new char[22];
char[] tempContent = new char[256];
tempTelNum = "123456".ToCharArray();
tempContent = "123456".ToCharArray();
pAppData1.telNum = tempTelNum;
pAppData1.msgLen = smsStr.Length;
pAppData1.content = tempContent;
pAppData1.dcs = '0';
pAppData1.sNet = 0;
pAppData1.serviceID = 0;
pAppData1.reserved = 0;
pAppData1.irecid = 0;
pAppData1.miSendType = 1;
pAppData1.Dest_Port = 0;
pAppData1.Orig_Port = 0;

int res = 1;
try
{
res = SMS_Send_Back_By_Sync(pAppData);
}
....

上了机子报错"Not supported Exception"
大家帮个忙看看哪个地方写错了,谢谢,急~~~~
...全文
137 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
超维电脑科技 2009-07-02
  • 打赏
  • 举报
回复
学习
UP
JF
满衣兄 2009-07-02
  • 打赏
  • 举报
回复
byte[]
lxc20082008 2009-07-01
  • 打赏
  • 举报
回复
很正确
amlove 2009-07-01
  • 打赏
  • 举报
回复
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]

指示如何在托管代码和非托管代码之间封送数据。

yangc_83 2009-07-01
  • 打赏
  • 举报
回复
高人,万分感谢!!!!!
qqiuzaihui 2009-07-01
  • 打赏
  • 举报
回复
把C#结构体部分:
public struct SMS_APP_BACK_SYNC
{
public char[] telNum;
public int msgLen;
public char[] content;
改成:
public struct SMS_APP_BACK_SYNC
{
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)]
public char[] telNum;
public int msgLen;
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] content;
试试。

111,097

社区成员

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

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

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