关于C#中P/Invoke带字符串结构体的传送问题

boymaster 2006-08-09 09:52:40
我想问一下,C#的P/Invoke的使用问题

目前我的情况是这样,想用C++ Native Code中的MAPI实现读取本机短信的功能,由C#做界面显示。

我用到了结构体的传递问题。

C++中是这样定义的:
typedef struct __ST_TEST_SMS__
{
int Oid; //联系人Oid
LPTSTR lpMsg; //短信内容
LPTSTR lpDate; //时间
} ST_TEST_SMS;

C#定义如下:
public struct SMSContent
{
public UInt32 Oid;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string lpMsg;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string lpDate;
};

并且我写了个接口函数,只是很简单的想先试试通过dll来改变结构体中的值,可一直不行~~~

C++的函数:
ST_TEST_SMS *g_stSMS;
int g_nSize;
int WINAPI XN_GetStruct(ST_TEST_SMS *pSMS)
{
/*
g_nSize = sizeof(ST_TEST_SMS);
memset(pSMS, 0x00, g_nSize);
pSMS.Oid = 1;
pSMS.lpMsg = _T("Message content.");
pSMS.lpDate = _T("2006-8-8 12:34:56");
*/
g_stSMS = pSMS;
g_nSize = sizeof(ST_TEST_SMS);
memset(g_stSMS, 0x00, g_nSize);
g_stSMS->Oid = 1;
g_stSMS->lpMsg = _T("dll content.");
g_stSMS->lpDate = _T("2006-8-8 12:34:56");

return 1;
}

C#:
[DllImport("dlltest.dll")]
static extern int XN_GetStruct(ref SMSContent stSMS);

SMSContent stSms = new SMSContent();
stSms.Oid = 100;
stSms.lpMsg = "Invoke content.";
stSms.lpDate = "2006-11-7";
XN_GetStruct(ref stSms);
MessageBox.Show(String.Format("{0}, {1}", stSms.Oid, stSms.lpMsg.ToString()));
...全文
164 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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