关于C#调用C++ DLL的问题

zhoudengpan102 2009-11-24 09:23:23
C++函数原型:

int __stdcall RecvSms(
char *sOrgAddr, //返回:源址
char *sPhone, //返回:手机号
unsigned char *sMsgID, //返回:上行或状态报告的msgid
unsigned char *ReportFlag, //返回:信息标志 0:状态报告 1:上行
char *sTimeStamp, //返回:接收到的时间 格式:2009-10-28 12:12:12
char *sSubmitdate, //返回:提交时间0910281212
char *sDonedate, //返回:受理时间0910281212
char *sErrorCode, //返回:状报告错误码
char *sMsg //返回:上行信息
);


调用示例:


char sOrgAddr[22] = {0};
char sPhone[22] = {0};
unsigned char sMsgID[25] = {0};
unsigned char ReportFlag[2] = {0};
char sTimeStamp[20] = {0};
char sSubmitdate[20] ={0};
char sDonedate[11] = {0};
char sErrorCode[8] ={0};
char sMsg[1024] = {0};
iRet = RecvSms( sOrgAddr, //源址
sPhone, //手机号
sMsgID, //上行或状态报告的msgid
ReportFlag, //信息标志 0:状态报告 1:上行
sTimeStamp, //接收到的时间,
sSubmitdate, //提交时间200910281212
sDonedate, //受理时间200910281212
sErrorCode, //状报告错误码
sMsg //上行信息
);




C#引入外部DLL

[DllImport("SMEIDll.dll", EntryPoint = "RecvSms")]
public static extern int RecvSms(StringBuilder sOrgAddr, StringBuilder sPhone
, ref int sMsgID, ref int ReportFlag, StringBuilder sTimeStamp
, StringBuilder sSubmitdate, StringBuilder sDonedate
, StringBuilder sErrorCode, StringBuilder sMsg);


不知道这样的类型转换有没有什么问题?
另外关于C#调用C++DLL类型转换是怎么转换的,谢谢!!!
...全文
561 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoudengpan102 2009-11-25
  • 打赏
  • 举报
回复
谢谢大家,路漫漫兮其修远 吾将上下而求索
yeaszi123 2009-11-25
  • 打赏
  • 举报
回复
没学过C++
龙宜坡 2009-11-25
  • 打赏
  • 举报
回复
这是MSDN上的数据类型对照表


不同语言的数据类型比较

本主题列出了 Visual Basic、C++、C#、JScript 和 Visual FoxPro 的数据类型。
zuoming120 2009-11-24
  • 打赏
  • 举报
回复
呵呵,它是指针,要序列化的,

char* tempchar=stackalloc char[100];
byte* tempbyte=stackalloc byte[100];

for (int i=0;i<100;i++)
{
tempbyte[i]=(byte)'\x0';
}

int rtn=AscendSMS.OpenComm(1);
if(rtn==0)
{
Console.WriteLine("Open success!");
Console.Write("GetSCA:");

Thread.Sleep(1000);

bool brtn=AscendSMS.GetSCA(1,(char*)tempbyte);

for(int i=0;i<100;i++)
{
if(tempbyte[i]==(byte)('\x0'))
break;
Console.Write("{0}",(char)tempbyte[i]);
}
Console.WriteLine("\nFinish!");
//AscendSMS.SendMsg(1,"Hi Yale","13958002360",1,false);
}
if(rtn!=0)
Console.WriteLine("Open Fail!");
gongsun 2009-11-24
  • 打赏
  • 举报
回复
都可以强制转化成 字符串
wuyq11 2009-11-24
  • 打赏
  • 举报
回复
C++ C#
char* string
传出的char* StringBuilder
short short
char byte
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr
http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
jshi123 2009-11-24
  • 打赏
  • 举报
回复
bychgh 2009-11-24
  • 打赏
  • 举报
回复
关注

62,049

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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