那个函数是一个COM事件的处理函数。
原型:(Delphi 风格)
TGSM2COMOnReceiveData = procedure(Sender: TObject; PackIndex: Integer;
var PackData: OleVariant; var Packdata1: OleVariant;Flag: Integer) of object;翻译成c++,大概是这个样子:(偶不会Delphi,呵呵)TGSM2COMOnReceiveData(Object Sender,//Object,一个万能的基类,和c#里Object不多一个样子。
int PackIndex,
unsigned char* PackData,//or char* PackData
unsigned char* PackData1,//保留字段
int Flag);//保留字段因为这是一个事件处理函数,所以使用tlbImp之后,从对象浏览器中可以看到一个委托:
IGSM2COMEvents_OnReceiveDataEventHandler;
它具有(int,string,string,int)这样的函数签名。原COM的PackData中,包含如下的数据:
第0-13 字节: 为对方手机号码。数据格式为ASCII 的16 进制字符串。如:
‘3836………’ 表示 ‘86’。
第14 字节: 为短信长度。
第15-字串结束: 为短信内容。现在,PackData被.net包装成一个string,我又如何提取数据那?刚才做了试验,可以提取前13个字节,但是第14个字节将消失,同时第15个字节将被改变(第15个字节取代了第14字节的内容,并且和com接收到的第15字节有所不同)。
原型:(Delphi 风格)
TGSM2COMOnReceiveData = procedure(Sender: TObject; PackIndex: Integer;
var PackData: OleVariant; var Packdata1: OleVariant;Flag: Integer) of object;翻译成c++,大概是这个样子:(偶不会Delphi,呵呵)TGSM2COMOnReceiveData(Object Sender,//Object,一个万能的基类,和c#里Object不多一个样子。
int PackIndex,
unsigned char* PackData,//or char* PackData
unsigned char* PackData1,//保留字段
int Flag);//保留字段因为这是一个事件处理函数,所以使用tlbImp之后,从对象浏览器中可以看到一个委托:
IGSM2COMEvents_OnReceiveDataEventHandler;
它具有(int,string,string,int)这样的函数签名。原COM的PackData中,包含如下的数据:
第0-13 字节: 为对方手机号码。数据格式为ASCII 的16 进制字符串。如:
‘3836………’ 表示 ‘86’。
第14 字节: 为短信长度。
第15-字串结束: 为短信内容。现在,PackData被.net包装成一个string,我又如何提取数据那?刚才做了试验,可以提取前13个字节,但是第14个字节将消失,同时第15个字节将被改变(第15个字节取代了第14字节的内容,并且和com接收到的第15字节有所不同)。
解决方案 »
- 求助,C# 捕获组合键代码
- 怎样把这个进制转换弄出来(水平有限,只做出了前半部分)!分少,本人奴隶!!
- 在C#中怎样在客户端给gridview添加一行,不加入数据库,不刷新页面! ~急!~ 在线等~
- 怎么播放在内存中的MP3
- 使用WebRequest如何得到带有<META HTTP-EQUIV="refresh" content="10; url=xxxxxxx.asp">的网页执行后的内容?
- 求助:想在写完一个dll之后,同时动态的生成一个象msdn那样的帮助文档,让使用该dll的人能更好的使用我们开发的dll.请问各路高手该如何做
- c#
- C#如何操作字符串?
- 怎样定位光标于datagridview的某个单元格
- C#将文件读取写入XX.BAT文件中求思路
- c#弱问题两个
- 关于托管的问题:无法在 __gc 指针”上执行指针算法? 分有的是啊。随便加
通过COM结果传送的所有字符串都是WCHAR的String,可以看BSTR的定义,我不知道Delphi中是不是自己转换成二进制流的,反正VB之类的是不会自己干的,现在C#之类也不会自己干。我的建议是,把取到的字符串转换成为二进制流,然后再一个字节一个字节读。现在你读的数据不对,就是因为你直接拿到的数据就是WCHAR的字符串,63 00 64 00...这种东西,第14个当然是00,所以就没有了。
从这个角度去分析试试看。