建议先了解一下windows编程的架构

解决方案 »

  1.   

    我以前是学的C++,但是DELPHI里面好多WINSOCK函数,变量的申明我不会,能否举个例子呢,或者贴一些程序
      

  2.   

    如果你原来有过windows编程经验就可以直接学习api
      

  3.   

    你不如找部好參考書看看吧.
    例如 Master Delphi 5 or 6;
    Delphi 5 or 6 Developer's Guide (開發者指南);
    Delphi in the NutShell;
    都是適合中級或以上的好書.Delphi和C++都是Object Oriented; 但是Delphi都較C++有條理, 但相信你一段時間來過渡呢.  先用用Delphi VCL試試看吧, 熟習了以後, 你再用win32 api編寫也未遲
      

  4.   

    用WINSOCKS API 函数进行通讯。函数功能详见DELPHI帮助。
    unit 
    uses
     winsock,...;//winsock单元可在delphi目录中找到。var
      Form1: TForm1;
      xl_socket:Tsocket;implementationprocedure TForm1.Button1Click(Sender: TObject);
    VAR
    XL_VERSION:WORD;
    XL_WSADATA:tWSADATA;
    RET:INTEGER;
    hostname:string;
    server_port:integer;
    xl_hostent:phostent;
    xl_sockaddrin:TSOCKADDRIN;
    psaddr:^longint;
    saddr:integer;
    begin
         server_port:=8080;
         hostname:='111.111.111.111';
         xl_sockaddrin.sin_port:=htons(server_port);
         xl_sockaddrin.sin_family:=PF_INET;
         xl_hostent:=gethostbyname(PCHAR(HOSTNAME));
         IF xl_hostent=nil then
         begin
              saddr:=inet_addr(pchar(hostname));
              if saddr<>-1 then
                 xl_sockaddrin.sin_addr.S_addr:= saddr;
         end
         ELSE
         BEGIN
              psaddr:=pointer(xl_hostent.h_addr_list^);
              xl_sockaddrin.sin_addr.S_addr:=psaddr^;
         END;
         XL_VERSION:=$101;
         RET:=WSASTARTUP(XL_VERSION,XL_WSADATA);
         IF RET=0 THEN
         BEGIN
              APPLICATION.MessageBox(初始化成功','注意',mb_ok);
              xl_socket:=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
              IF XL_SOCKET=INVALID_SOCKET THEN
                 APPLICATION.MessageBox('SOCKET创建失败','注意',mb_ok)
              else
              begin
                   APPLICATION.MessageBox('SOCKET创建成功','注意',mb_ok);
                   RET:=CONNECT(xl_socket,xl_sockaddrin,sizeof(xl_sockaddrin));               if ret=socket_error then
                   begin
                       APPLICATION.MessageBox('SOCKET连接失败','注意',mb_ok);
                       ret:=closesocket(xl_socket);
                       if ret=0 then
                          APPLICATION.MessageBox('SOCKET释放成功!','注意',mb_ok);
                   end
                   else
                   begin
                       APPLICATION.MessageBox('SOCKET连接成功!','注意',mb_ok);
                       button2.Enabled:=true;
                       button3.Enabled:=true;
                       exit;
                   end;
              end;
              WSAcleanup;
         END;procedure TForm1.Button3Click(Sender: TObject);//发送
    var
    ret,len:integer;
    s:string;
    psend:pchar;
    begin
          s:=memo1.text;
          len:=length(s);
          Psend:=stralloc(LEN);
          STRPCOPY(Psend,S);
          ret:=send(xl_socket,Psend^,len,0);
          if ret<>SOCKET_ERROR then
             application.MessageBox('发送成功','注意',mb_ok)
          else
             application.MessageBox('发送失败','注意',mb_ok);
    end;
      

  5.   

    你不如找部好參考書看看吧.
    例如 Master Delphi 5 or 6;
    Delphi 5 or 6 Developer's Guide (開發者指南);
    Delphi in the NutShell;
    都是適合中級或以上的好書.Delphi和C++都是Object Oriented; 但是Delphi都較C++有條理, 但相信你一段時間來過渡呢.  先用用Delphi VCL試試看吧, 熟習了以後, 你再用win32 api編寫也未遲
      

  6.   

    你不如找部好參考書看看吧.
    例如 Master Delphi 5 or 6;
    Delphi 5 or 6 Developer's Guide (開發者指南);
    Delphi in the NutShell;
    都是適合中級或以上的好書.Delphi和C++都是Object Oriented; 但是Delphi都較C++有條理, 但相信你一段時間來過渡呢.  先用用Delphi VCL試試看吧, 熟習了以後, 你再用win32 api編寫也未遲
      

  7.   

    从易到难才是学习的好方法,一开始就学api,好象是急了一点
      

  8.   

    同意楼上的
    一步一步来
    先把语法等学习好
    在是API等高层次的啊
    而且最好的方法是自己写一个比较完整的程序出来旧好拉
    GOOD LUCKLY!
      

  9.   

    你真棒!
    我学变成已经快半年了,一见api就头晕!我还不会用呢!  帮不了你!
      

  10.   

    其实API 中的变量类型可以直接在delphi中使用的
    delphi已经为我们预先定义了大部分的类型
      

  11.   

    为什么我不能生成SOCKET,而且为什么我通过P传递参数得不到我想要的直呢,大家看看我的程序,帮我修改一下!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, winsock,StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        ListBox1: TListBox;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;scansocket:tsocket;
    implementation
    Function checkport(pnum:pointer):boolean;stdcall;
      var
        net,num,ret:integer;
        version:WORD;
        sa:tsockaddrin;
         wsd:TWSADATA;
        p:^integer;
     begin
       p:=pnum;
       num:=p^;
       sa.sin_port:=htons(num);
       sa.sin_family:=PF_INET;
       sa.sin_addr.s_addr:=inet_addr(pchar(form1.Edit1.text));
       version:=$101;
       ret:=WSASTARTUP(version,wsd);
              if ret=0 then
                  begin
                    NET:=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
                    IF NET=INVALID_SOCKET THEN
                    begin
                    result:=false;
                    APPLICATION.MessageBox('SOCKET创建失败','注意',mb_ok);
                     end
                    else
                     begin
                        ret:=connect(scansocket,sa,sizeof(sa));
                        if ret=socket_error then
                            begin
                            APPLICATION.MessageBox('SOCKET连接失败','注意',mb_ok);
                             ret:=closesocket(scansocket);
                             result:=false;
                             if ret=0 then
                            APPLICATION.MessageBox('SOCKET释放成功!','注意',mb_ok);
                            end
                        else
                             begin
                              form1.ListBox1.Items.Add(inttostr(num));
                             end;
                       end;
                         wsacleanup;
                        result:=true;
                        form1.ListBox1.Items.Add(inttostr(num));
                   end;
    {$R *.dfm}   end;procedure TForm1.Button1Click(Sender: TObject);
    var      i:integer;
         p1:^integer;
        hMasterThread:  array[0..49]  of  THandle;
        dwThreadID:  array[0..49]  of  DWORD;
    begin
        for  i  :=  0  to  4  do
        begin        p1:=@i;
            hMasterThread[i]:=CreateThread(nil,0,@checkport,p1,0,dwThreadID[i]); 
        end;//for 
    end; end.
      

  12.   

    DELPHI的优点在于其的快速开发和效率关系非常好,能够用快速开发解决问题的何必用到API函数呢?而且调用函数就失去了面向对象的优势和意义,难道只是要显示一下自己的编程功底?没必要吧。
    个人意见,仅供参考。另外有反对意见者不要乱扔鸡蛋,毕竟鸡蛋还是很贵的哟。
      

  13.   

    帮我解决上面的问题呀!老大们,不会你们不会吧,我才接触DELPHI一个月呀,我到了
      

  14.   

    呵呵,API这个东西比较麻烦的,不是说学DELPHI能够明白,而是得看Windows下编程的书才可以的,例如《Windows核心编程》。你的这个程序就算解决了也没用,因为你肯定还会出很多问题,所以首先你应该明白你到底是在学DELPHI呢,还是在学Windows编程?这样才能有的放矢。你的程序里用到的函数我没见过(也是菜鸟),不好意思,帮不上忙。
      

  15.   

    编译没有错误,就是运行老是提示不能创建SOCKET,但是我测试的是我自己的机子呀,我 TELNET都可以的
      

  16.   

    我用DELPHI 4年了,90%以上的时间我做别的事,可惜没学好。我经常要看的不是什么高深的难题,多半是基础的东西,不过我认为掌握这些基础的东西已经可以解决60%以上的问题。我现在又要学DELPHI了,从DELPHI4到DELPHI6。我有很多秘ji之类的参考书,看多了认为这些东西好花,对我的项目没有太多的帮助。
    我要解决的95%都是数据库编程问题。
      

  17.   

    计算机编程语言虽然几经换代,但基本算法和基础结构是没有多大变化的。仔细研究一下API就知道,即使你只学过20年前的C。你一样能编写出高质量的windows程序。所以说,学东西要钻深,不要理会太多的什么新技术新名词,万变不离其宗,天下武功出少林。
      

  18.   

    关于seekuface的看法我有另外的理解,其实DELPHI把API门封装到对象中了。举 个例子,你可以Canvas.Pixels[x][y]:=0;这怎么看都是个赋值操作,实际上用到了三个API,共四个步骤。有兴趣的话看看borland的源码,相信会有很大帮助。Winsock?没看过,没接触到。:P
      

  19.   

    dolphi说的对。假如明天有个MacroHard开发了个别的系统取代了WIN,那Delphi之类的就不能用了,毕竟是构筑在win api 上的东西。看本质看本质
      

  20.   

    //个人观点,仅供参考
    编程功底:
    是对问题的分析解决能力,不是API或VCL
    最好在数据结构和算法上下功夫
    工具和方法都可以通过不断的实践掌握的
      

  21.   


      //个人观点,仅供参考
    编程功底:
    是对问题的分析解决能力,不是API或VCL
    最好在数据结构和算法上下功夫
    工具和方法都可以通过不断的实践掌握的