MFC中是这么定义的
EXPORT BYTE HD_DecodeSMS(PSTR pSrc, DWORD dwSrcSize, PSTR pDstBuf,
 PSTR pDstMsg, PSTR pDstPhone);

char szDataBuf[1024] = "", sztMsgBuf[1024] = "", szPhoneBuf[20] = "";
memset(szDataBuf, 0, 1024);
memset(sztMsgBuf, 0, 1024);
memset(szPhoneBuf, 0, 20);
BYTE bMsg = 0;
bMsg = HD_DecodeSMS((PSTR)wParam, lParam, szDataBuf, sztMsgBuf, szPhoneBuf);那么如果我要在C#中使用的话该如何定义呢?m是widnows消息(System.Windows.Forms.Message m)
public static extern byte HD_DecodeSMS(IntPtr pSrc, IntPtr dwSrcSize, char[] pDstBuf,
                                 char[] pDstMsg, char[] pDstPhone);
char[] c1 = new char[1024];
            char[]  c2 = new char[1024];
            char[] c3 = new char[20];            //解码
            byte b = HD_DecodeSMS(m.WParam, m.LParam, c1, c2, c3);
我这么写似乎无效,实例代码是MFC的,它那么写就能够得到正确的内容,我的C#无法得到,除了char[], string我也试过,不行。谢谢了

解决方案 »

  1.   

    如果用IntPtr的话,IntPtr的话,C#这边怎么处理啊?最中intptr怎么转换成string啊?
    这是个短消息解码的函数
      

  2.   

    byte[]c#这边的函数声明中的参数再加上MarshalAs属性
      

  3.   

    你试着用StringBuilder。PSTR pDstBuf, PSTR pDstMsg, PSTR pDstPhone
    都是PSTR而不是PCSTR,pDst(Destination),这些都暗示着是传出字符串。调用前记得先分配足够多的空间。{
      StringBuilder dstBuf = new StringBuilder(1024);
      StringBuilder dstMsg = new StringBuilder(1024);
      StringBuilder dstPhone = new StringBuilder(1024);  HD_DecodeSMS(pSrc, dwSrcSize, dstBuf, dstMsg, dstPhone);  
    }// PSTR src(Source)可能是传入的,你先试着用string。最好能有文档说明那些是传入参数,哪些是传出的,谁负责释放内存,缓冲区要多大等等。[DllImport(...)]
    public static extern byte HD_DecodeSMS(string src, int dwSrcSize, StringBuilder pDstBuf, StringBuilder pDstMsg, StringBuilder pDstPhone);  
      

  4.   

    解码的已经知道了,但是传intptr,依然无法得到正确的内容