C#调用C/C++写的动态连接库 [DllImport(XXXX)]public static extern bool SendSMS( string Phone, string Sms, int uPhoneLen, int uSmsLen); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/t/20041205/11/3616246.html hdt(倦怠) ( ) 信誉:120 Blog ====================================你的方法我试过了,但发生下面错误!“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” 我的开发环境是 win2003 + sp1 + vs2005 两个问题bool WINAPI SendSMS(char *Phone, char *Sms, int uPhoneLen, int uSmsLen);1、phone sms 的编码有何要求 ,如果是Ansi,方法前加CharSet=CharSet.Ansi)]2、phone sms 是否为输出参数 两个问题bool WINAPI SendSMS(char *Phone, char *Sms, int uPhoneLen, int uSmsLen);1、phone sms 的编码有何要求 ,如果是Ansi,方法前加CharSet=CharSet.Ansi)]2、phone sms 是否为输出参数========================================================================1、CharSet能选的编码我都试过了2、phone sms 是否为输出参数? 是输入的吧!如果是输出参数,我该如何调用?说明文档只有我上面贴出的那么多,没有详细说明了! 输出参数用参变量前加output关键字 发送短信,应该不是输出参数吧!用out我也试过了,还是出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误! 实在不行,我给你个笨方法phone , sms 改用System.IntPtr;调用string strphone = "XXXx";string strsms = "yyyyy";char[] phones = strphone.ToCharArray();char[] sms = strsms.ToCharArray();System.IntPtr p1 = Marshal.UnsafeAddrOfPinnedArrayElement( phones ,0);IntPtr p2 = Marshal.UnsafeAddrOfPinnedArrayElement( sms ,0);SendSMS( p1 , p2 , phones.length , sms.length );还有你如果用string的话phone ,sms 试试 加 ([MarshalAs(UnmanagedType.LPStr)]且用CharSet=CharSet.Ansi后面的两个长度小心, 下面这些参数在c#中要不要定义,要怎么定义?==========================#define WM_NEW_MESSAGE = WM_USER + 1#define WM_NEW_BILL = WM_USER + 2#define WM_KEYPRESS = WM_USER + 3#define WM_CONNECTED = WM_USER + 4#define WM_CALLIN = WM_USER + 5#define WM_STARTTALK = WM_USER + 6#define WM_PIPEDATE = WM_USER + 7#define BILL_TYPE_CALLIN = 0x0001#define BILL_TYPE_CALLOUT = 0x0002#define BILL_TYPE_HELP = 0x0003 要定义可以const int WM_NEW_MESSAGE=0x0401;const int WM_NEW_BILL = 0X402;或者用enum C#截取多个括号里面的数字放入数组里 如何调用某个已激活窗体的事件操作 WinForm的DataGrid有没有选中某行激发事件那种功能?多谢 c#加入背景图 运行变慢 我在窗体里画了线,可是移动了窗口的滚动条后,线就没了,怎么办呀? 删除本地文件出错 高分求C#做的图书馆管理系统的源代码 如何显示空的datagrid 关于正则表达式的问题,怎样表示中文字符串阿? 请问专家:是静态方法的问题吗? 鼠标移过按钮时改变按钮颜色 sqldatareader 的 read()出提示:阅读器关闭时 Read 的尝试无效 请前辈指点!!
====================================
你的方法我试过了,但发生下面错误!“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
bool WINAPI SendSMS(char *Phone, char *Sms, int uPhoneLen, int uSmsLen);
1、phone sms 的编码有何要求 ,如果是Ansi,方法前加CharSet=CharSet.Ansi)]2、phone sms 是否为输出参数
bool WINAPI SendSMS(char *Phone, char *Sms, int uPhoneLen, int uSmsLen);
1、phone sms 的编码有何要求 ,如果是Ansi,方法前加CharSet=CharSet.Ansi)]2、phone sms 是否为输出参数
========================================================================1、CharSet能选的编码我都试过了2、phone sms 是否为输出参数? 是输入的吧!如果是输出参数,我该如何调用?说明文档只有我上面贴出的那么多,没有详细说明了!
phone , sms 改用System.IntPtr;
调用
string strphone = "XXXx";
string strsms = "yyyyy";
char[] phones = strphone.ToCharArray();
char[] sms = strsms.ToCharArray();
System.IntPtr p1 = Marshal.UnsafeAddrOfPinnedArrayElement( phones ,0);
IntPtr p2 = Marshal.UnsafeAddrOfPinnedArrayElement( sms ,0);
SendSMS( p1 , p2 , phones.length , sms.length );还有你如果用string的话
phone ,sms 试试 加 ([MarshalAs(UnmanagedType.LPStr)]且用CharSet=CharSet.Ansi
后面的两个长度小心,
==========================
#define WM_NEW_MESSAGE = WM_USER + 1
#define WM_NEW_BILL = WM_USER + 2
#define WM_KEYPRESS = WM_USER + 3
#define WM_CONNECTED = WM_USER + 4
#define WM_CALLIN = WM_USER + 5
#define WM_STARTTALK = WM_USER + 6
#define WM_PIPEDATE = WM_USER + 7#define BILL_TYPE_CALLIN = 0x0001
#define BILL_TYPE_CALLOUT = 0x0002
#define BILL_TYPE_HELP = 0x0003
可以
const int WM_NEW_MESSAGE=0x0401;
const int WM_NEW_BILL = 0X402;
或者用enum