首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一段C代码转C#解决方案

2012-03-12 
一段C代码转C#不懂C。。。下面代码能转成C#吗。。望指点指点。。拜谢------longmac_addr_sys(u_char*addr){struct

一段C代码转C#
不懂C。。。下面代码能转成C#吗。。望指点指点。。拜谢
------

long   mac_addr_sys   (   u_char   *addr)
{
        struct   ifreq   ifr,*IFR;
        struct   ifconf   ifc;
        char   buf[1024];
        int   s,i;
        int   ok   =   0;

        s   =   socket(AF_INET,   SOCK_DGRAM,   0);
        if   (s==-1)   {
                return   -1;
        }

        ifc.ifc_len   =   sizeof(buf);
        ifc.ifc_buf   =   buf;
        ioctl(s,   SIOCGIFCONF,   &ifc);
 
        IFR   =   ifc.ifc_req;
        for   (i   =   ifc.ifc_len   /   sizeof(struct   ifreq);   --i   > =   0;   IFR++)   {

                strcpy(ifr.ifr_name,   IFR-> ifr_name);
                if   (ioctl(s,   SIOCGIFFLAGS,   &ifr)   ==   0)   {
                        if   (!   (ifr.ifr_flags   &   IFF_LOOPBACK))   {
                                if   (ioctl(s,   SIOCGIFHWADDR,   &ifr)   ==   0)   {
                                        ok   =   1;
                                        break;
                                }
                        }
                }
        }

        close(s);
        if   (ok)   {
                bcopy(   ifr.ifr_hwaddr.sa_data,   addr,   6);
        }
        else   {
                return   -1;
        }
        return   0;
}


int   checkserial()
{
        long     stat;
        int   i;
        FILE   *fp;
        char                 password[19],new_pass[19];
        u_char   addr[6];
        long   encrypt[6];

        memset(encrypt,0,sizeof(encrypt));
        memset(password,0,sizeof(password));
        memset(new_pass,0,sizeof(new_pass));

        fp   =   fopen( "/usr/sbin/serial.no ", "r ");


        if(   fp   ==   NULL   ){
  printf( "Open   the   serial.no   file   error!\n ");
return   -1;
}
        fread(password,1,18,fp);  

        stat   =   mac_addr_sys(addr);
        if   (0   ==   stat)   {
encrypt[0]   =   addr[0]*0x01   +   addr[1];
encrypt[1]   =   addr[1]*0x02   +   addr[2];
encrypt[2]   =   addr[2]*0x03   +   addr[3];
encrypt[3]   =   addr[3]*0x05   +   addr[4];
encrypt[4]   =   addr[4]*0x07   +   addr[5];
encrypt[5]   =   addr[5]*0x0b   +   addr[0];
                sprintf(new_pass, "%3.3x%3.3x%3.3x%3.3x%3.3x%3.3x ",encrypt[0],encrypt[1],encrypt[2],encrypt[3],encrypt[4],encrypt[5]);
        }
        else   {
return   -1;
        }

        if(   strcmp(password,new_pass)   ==   0   ){
return   0;
}
        return   -1;
}

;;;;定义加密函数


int   main(int   argc,   char   *argv[])
{
int   c;
char   filename[80]   =   " ";
char   hostname[MAXHOSTNAMELEN]= " ";
char   tmp[80];
char   *   xarg   =   NULL;
int   x;
FILE   *f;
sigset_t   sigs;
int   num;
char   *buf;
char   *runuser=NULL,   *rungroup=NULL;

##开始调用
                struct   pollfd   silly_macos[1];
        if(   checkserial()   !=   0   ){
                printf( "Check   serial   error!\n ");
return   0;
}
。。。。。


末尾

/*   Do   nothing   */
for(;;)  
poll(silly_macos,0,   -1);
return   0;
}


[解决办法]
把它编译成dll,然后直接用C#调用。
[解决办法]
C++代码,当然可以转换成C#代码了.
[解决办法]
不是很难,取mac地址,按位于输入的序列号进行运算,如此而已
[解决办法]
lz:动态库,这个你懂吧,你用VC把原来的代码编译成动态库,由net来调用.如:
[DllImport( "User32.dll ")]
public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr child, string strClass, string strWinow);

还有一种办法:写成COM的组件,直接引用到net工程引用.
[解决办法]
即使转出来变化也是很大的,你既然不懂C#还转干什么呢?如果你想写C#代码的话,不妨先学学C#网络方面的通讯,会有帮助的。
[解决办法]
关注..

热点排行