我想写程序对底层进行操作,实现控制某一个物理端口收发数据,或者是设置某个设备的时钟频率这样的功能。但是用C#好像找不到到底层的途径,哪位高手曾经用C#写过这样的程序希望能给指点一下,谢谢!

解决方案 »

  1.   

    操作物理端口收发数据 是指对于本机的话 那不就是socket编程?如果是别的硬件 那么需要厂商提供的dll才可以
      

  2.   

    如果的一些端口操作,如串口,并口,需要使用API函数,
    但C就不用,可以使用汇编搞定它,所以,如果能不能的话,答案是是可以的,最坏的情况就是用C写一个DLL,然后用C#调用就是了
      

  3.   

    可以啊!!API就行了啊!!wodegege10正解!!
      

  4.   

    具体的就是我想看C#能不能实现802.1x认证程序,两台机子的通信比较方便搞定,但是好像没有什么很方便的办法向交换机发送认证的数据包啊。我感觉C#里对网络的编程归根结底都是几台机子之间用TCP或者UDP协议通信,对串口的好像是想怎么写就怎么写啊。再放20分给各位高手吧,我分不多太寒酸了不好意思!
      

  5.   

    The DllImportAttribute attribute provides the information needed to call a function exported from an unmanaged DLL. As a minimum requirement, you must supply the name of the DLL containing the entry point.
      

  6.   

    是可以的
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  7.   

    绝对能.C#,c++,C,当然是功能上一个比一个强,一个比一个强.毕竟C是70年代的东西,在这个基础上C++在80年代出现.C#是在这个基础上出现与21世纪.比如WIN CE,WINDOWS MOBILE.好象都用到了C#.但是效率,在操作底层上面,肯定是不如C,C++啦.看你的需求啦,是偏重效率还是偏重省事.呵呵.
      

  8.   

    哪位高手能给个API啊,找了半天也找不到该用哪个API
      

  9.   

    不能直接操作,要借API才能操作,不过这样受制于人,不爽
      

  10.   

    加分了,麻烦高手们给个API,谢谢!
      

  11.   

    可以,不然C#可以拿掉windows编程这一块了。
      

  12.   

    MS有方法可以用C#作802.1X认证,但是现在有个问题:非要DllImport么?
      

  13.   

    对底层的操作,还是c最方便. 因为底层api就是c写的.如果你是在要在c#里操作底层,就必须注意 参数 类型匹配等问题.总之反增加难度又在效率上不讨好.个人意见是,用c#和c联合编程,各展所长.
      

  14.   

    到现在还没有找到合适的API/WMI,请大家帮我找找,谢谢!
      

  15.   

    串口的api有很多:如CreateFile, ReadFile, WriteFile。
    在os看来,串口是作为文件来读写的。可能还要用到的api还有
    InitCriticalSection,   //临界区,避免对缓冲区的同时访问
    EnterCriticalSection, 
    LeaveCriticalSection,
    WaitForMutipleObject,  //等待事件
    CreateEvent,
    SetEvent,
    SendMessage
    等等等...
      

  16.   

    如果你要方便的串口控件,可以使用AxMSCommLib.AxMSComm控件。我以前一直用这个。不知道现在是不是有更好的控件可以用了。
      

  17.   

    不行,因为涉及到安全性的问题,C#不提供底层物理端口的操作。以前用 Turbo C 的时候,倒是用outport()等函数直接操作过端口。
      

  18.   

    现在这问题有新进展,我用Packet.dll里面的函数,请问大家PVOID空指针在C#中应该是什么样的数据类型?
      

  19.   

    继续,曲线救国出了问题。packet.dll里有个函数PacketGetAdapterNames,带两个参数sStr和bufferSize,一个是存放网卡信息的缓冲区,另一个是缓冲区大小。我写一段代码运行之后函数已经返回true了,bufferSize也被改了,但是sStr没变。代码贴在下面了,很着急,请哪位高手帮忙调一下,谢谢! 
        public partial class Form1 : Form
        {
            [DllImport("packet.dll",EntryPoint="PacketGetAdapterNames",CharSet=CharSet.Ansi)]
            public static extern bool PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, ref int BufferSize);
            
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                bool b = false;
                int length = 40;
                string an = new string('0',length);
                b = PacketGetAdapterNames(an, ref length);
                NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces();
                label1.Text = an;
            }
        }
      

  20.   

    你可以直接用VB中的MY,C#也可以用,说不定能够解决你的需求.