• 全部
  • 问答

关于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()));
...全文
117 点赞 收藏 回复
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复

还没有回复,快来抢沙发~

发帖
Windows客户端开发
创建于2007-08-27

7531

社区成员

Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
申请成为版主
帖子事件
创建了帖子
2006-08-09 09:52
社区公告
暂无公告