peakzhang 发表于 2007-12-11 22:21:19

ACE程序 部署问题

我刚用 VS2005 编译了ACE5.5,成生了ace.dll aced.dll 和ace.lib aced.lib等,并用这些写了简单的测试程序,运行通过了;
但当我将编译通过的SimpleServer.exe 和aced.dll部署到另外一台机器上运行时却爆出以下错误,不知是何问题
d:\SimpleServer.exe
由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
本人开发环境为:ACE5.5 + vs2005 + windows 2003 server

SimpleServer 的代码如下:

#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/Log_Msg.h"
#include "ace/OS_NS_sys_time.h" // for ACE_Time_Value
#define MAXHOSTNAMELEN 50
int ACE_TMAIN (int, ACE_TCHAR *[])
{
    ACE_INET_Addr port_to_listen (50000, ACE_LOCALHOST);
    ACE_SOCK_Acceptor acceptor;
    if (acceptor.open (port_to_listen, 1) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
      ACE_TEXT ("%p\n"),
      ACE_TEXT ("acceptor.open")),
      100);
    /*
    * The complete open signature:
    *
    int open (const ACE_Addr &local_sap,
    int reuse_addr = 0,
    int protocol_family = PF_INET,
    int backlog = ACE_DEFAULT_BACKLOG,
    int protocol = 0);
    *
    */
    while (1)
    {
      ACE_SOCK_Stream peer;
      ACE_INET_Addr peer_addr;
      ACE_Time_Value timeout (10, 0);
      /*
      /* Basic acceptor usage
      /*/
#if 0
      if (acceptor.accept (peer) == -1)
            ACE_ERROR_RETURN ((LM_ERROR,
            ACE_TEXT ("(%P|%t) Failed to accept ")
            ACE_TEXT ("client connection\n")),
            100);
      else
      {
            ACE_TCHAR peer_name;
            peer_addr.addr_to_string (peer_name, MAXHOSTNAMELEN);
            ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%P|%t) Connection from %s\n"),
                peer_name));
            char buffer;
            ssize_t bytes_received;
            while ((bytes_received =
                peer.recv (buffer, sizeof(buffer))) != -1)
            {
                peer.send_n (buffer, bytes_received);
            }
            peer.close ();
      }
#endif /* 0 */
      if (acceptor.accept (peer, &peer_addr, &timeout, 0) == -1)
      {
            if (ACE_OS::last_error() == EINTR)
                ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%P|%t) Interrupted while ")
                ACE_TEXT ("waiting for connection\n")));
            else
                if (ACE_OS::last_error() == ETIMEDOUT)
                  ACE_DEBUG ((LM_DEBUG,
                  ACE_TEXT ("(%P|%t) Timeout while ")
                  ACE_TEXT ("waiting for connection\n")));
      }
      else
      {
            ACE_TCHAR peer_name;
            peer_addr.addr_to_string (peer_name, MAXHOSTNAMELEN);
            ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%P|%t) Connection from %s\n"),
                peer_name));
            char buffer;
            ssize_t bytes_received;
            while ((bytes_received =
                peer.recv (buffer, sizeof(buffer))) != -1)
            {
                peer.send_n (buffer, bytes_received);
            }
            peer.close ();
      }
    }
    return (0);
}

望高手指教,在线等。。。

peakzhang 发表于 2007-12-11 22:21:32

原因:CRT版本问题,vs2005编译下的“

由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

”问题解决方案如下:

需要将Microsoft.VC80.DebugCRT.manifest和Microsoft.VC80.CRT.manifest至于目标机器应用程序运行目录下或放到system32下
页: [1]
查看完整版本: ACE程序 部署问题