日期:2014-05-17  浏览次数:20932 次

用C#编译C++原代码
现自己在做一项目,要用到PLC串口通信,老板要求按照他的原代码来写串口通信部分。(给有原代码,但是用C++写的)现开始用C#来编译原C++代码,遇到一个问题,现求教。谢谢。
A:
因C++原代码中大量用到指针,所以我编译时想用C#中指针,但遇到这个问题?如下:
C++原代码:
BOOL  CDGX::WriteBfm( int nUnit, int addr, int nDevCnt, LPBYTE data )
{
BYTE buf[530];//最大524
LPBYTE p = &buf[4];
int i, n, byt;

while( nDevCnt > 0 )
{
if( m_nUartStopFlag != 0 )
return FALSE;

if( nDevCnt > 127 )
n = 127;
else
n = nDevCnt;

p[0] = 0xf1;
p[1] = ((nUnit<<4)&0xf0) | ((addr>>12)&0xf);

p[2] = (addr>>4)&0xff;
p[3] = (addr<<4)&0xf0;
p = &p[3];

byt = n*2;//字节数
*p++ |= (byt>>4 ) & 0xf;
*p =  (byt<<4) & 0xf0;
//数据
for( i=0; i<byt; i++ )
{
int Q = *data++;
*p++ |= (Q>>4 ) & 0xf;
*p = (Q<<4) & 0xf0;
}

for( i = 0; i < MAX_UART_TRY; i++ )
{
SendReq( buf, n*4 + 9 );
if( WriteDevice_Ack() )
break;
if( m_nUartStopFlag != 0 )
return FALSE;
ReShakeHandle(1);
}
if( i == MAX_UART_TRY )
return FALSE;
nDevCnt -= n;
addr += byt;
data += byt;
}
return TRUE;

}

 其中:typedef BYTE far     *LPBYTE;
typedef unsigned char       BYTE;
C#代码(自己编译的):
  public unsafe bool WriteBfm(int nUnit, int addr, int nDevCnt, byte* data)
             {
               
                 byte[] buf = new byte[530];
                 fixed (byte* pbuf = buf)
                 {
                     fixed (byte* p = &buf[4])
                     {
                         int i, n, byt;
                         while (nDevCnt > 0)
                         {
                             if (m_nUar