我用vc做了个dll给delphi程序调用,dll中的函数被delphi程序定时调用,函数如下:
if (!AfxSocketInit()){
    ::AfxMessageBox("socetfail!1");
    return FALSE;
}
CSocket *socketme = new CSocket;
if(!(socketme->Create()))
  ::AfxMessageBox("false!");
else
   ::AfxMessageBox("true!");
若socket没有初始化,则delphi程序每秒弹出一个false
若socket初始化,则delphi程序第一次弹出true,以后每次socket初始化都成功
但任何消息都不弹出,也就是说,dll在socketme->Create()不动了
但在vc中调用则没有问题!
高手赐招!

解决方案 »

  1.   

    AfxSocketInit
    是不是这个函数在DELPHI中没有正常初始化SOCKET哦!
    我也不清楚DELPHI是怎么弄的啦,你到DELPHI那边去问问咯!
      

  2.   

    socket库有没有初始化?
    还有dll里面用到的类,是不是mfc自己所有
      

  3.   

    to yhqs540(普通话,语言中的战斗机):
    1、什么叫socket库没有初始化?怎么初始化?
    2、dll是常规dll,可以在delphi中调用
      

  4.   

    楼主可以试试看在socketme->Create()里面加上参数,而不用它默认的参数socketme->Create(1024,SOCK_STREAM,"本机IP")  // 端口、类型、IP试试看,也许这样可以 ^_^
      

  5.   

    if (!AfxSocketInit()){
        ::AfxMessageBox("socetfail!1");
        return FALSE;
    }
      有可能放的位置不对,应该在DLL加载的时候使用上面的语句(可能多次SocketInit了)
      

  6.   

    哦,这样啊,呵呵那任何休息都不弹出,说不定是卡在AfxSocketInit()里了呢^_^再说这样的dll里面能用CSocket类末?CSocket不是MFC封装的类嘛
      

  7.   

    if (!AfxSocketInit()){
        ::AfxMessageBox("socetfail!1");
        return FALSE;
    }
    是不是重复初始化了?
      

  8.   

    dll里面可以用MFC类啊,只是不能导出mfc类给别的程序调用,注意一下导出参数就行
    另外,if (!AfxSocketInit()){
        return FALSE;
    }
    我确保没问题,也没卡住!
    唉!我看这个问题没看全代码是解决不了了,再放两天,碰运气了!
      

  9.   

    真晕!在create()函数上加了个try catch结果create()出现异常,实际上并不是在创建socket时卡住了,而是跳入异常了,在new CSocket后加上
    CString str;
    str.Format("%d", (int)m_Ctrlsok);
    ::AfxMessageBox(str);
    弹出socket值不为0,那怎么会进入异常啊?
      

  10.   

    刚刚搜索了一下csdn,发现用select函数
    int select(
      int nfds,
      fd_set* readfds,
      fd_set* writefds,
      fd_set* exceptfds,
      const struct timeval* timeout
    );
    可以捕捉异常,高手能不能给你例子啊!