Archived

This forum has been archived. Please start a new discussion on GitHub.

how to combinate ICE with ACE

I want to use ICE3.3 with ACE5.6.7, but when I add ace.h to my source cpp,it gives me some errors:
1>
Build started: Project: transfer_server, Configuration: Debug Win32
1>Compiling...
1>server.cpp
1>d:\ice-3.3.0-vc90\include\ice\application.h(35) : error C2487: 'ace_os_main_i' : member of dll interface class may not be declared with dll interface
1>d:\ice-3.3.0-vc90\include\ice\application.h(35) : error C3254: 'Ice::Application' : class contains explicit override 'run_i' but does not derive from an interface that contains the function declaration
1>d:\ice-3.3.0-vc90\include\ice\application.h(35) : error C2838: 'run_i' : illegal qualified name in member declaration
1>d:\ice-3.3.0-vc90\include\ice\application.h(35) : error C2535: 'int Ice::Application::ace_main_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2535: 'int Ice::Application::ace_main_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2487: 'ace_os_main_i' : member of dll interface class may not be declared with dll interface
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2535: 'int Ice::Application::ace_os_main_i(ACE_Main_Base &,int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_os_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2011: 'Ice::Application::ACE_Main' : 'class' type redefinition
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ACE_Main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2027: use of undefined type 'Ice::Application::ACE_Main'
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ACE_Main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2535: 'int Ice::Application::run_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::run_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(36) : error C2535: 'int Ice::Application::main(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2535: 'int Ice::Application::ace_main_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2487: 'ace_os_main_i' : member of dll interface class may not be declared with dll interface
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2535: 'int Ice::Application::ace_os_main_i(ACE_Main_Base &,int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_os_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2027: use of undefined type 'Ice::Application::ACE_Main'
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ACE_Main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2535: 'int Ice::Application::run_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::run_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(37) : error C2535: 'int Ice::Application::main(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2535: 'int Ice::Application::ace_main_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2487: 'ace_os_main_i' : member of dll interface class may not be declared with dll interface
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2535: 'int Ice::Application::ace_os_main_i(ACE_Main_Base &,int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_os_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2027: use of undefined type 'Ice::Application::ACE_Main'
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ACE_Main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2535: 'int Ice::Application::run_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::run_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(38) : error C2535: 'int Ice::Application::main(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2535: 'int Ice::Application::ace_main_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2487: 'ace_os_main_i' : member of dll interface class may not be declared with dll interface
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2535: 'int Ice::Application::ace_os_main_i(ACE_Main_Base &,int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ace_os_main_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2027: use of undefined type 'Ice::Application::ACE_Main'
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::ACE_Main'
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2535: 'int Ice::Application::run_i(int,char *[])' : member function already defined or declared
1> d:\ice-3.3.0-vc90\include\ice\application.h(35) : see declaration of 'Ice::Application::run_i'
1>d:\ice-3.3.0-vc90\include\ice\application.h(39) : error C2535: 'int Ice::Application::main(int,char *[])' : member function already defined or declared
.....
Can anyone helps me,3ks!

Comments

  • Source cpp is as follow:
    #include <ace/ace.h>
    #include <Ice/Ice.h>
    #include "byte.h"
    using namespace std; 
    using namespace transfer; 
    
    class ServiceI : public Service { 
    public: 
    	virtual void transfer(const ::transfer::Des&, ::Ice::Int, const ::transfer::Frame&, const ::Ice::Current& = ::Ice::Current());
    }; 
    
    void
    ServiceI::transfer(const ::transfer::Des& targets, ::Ice::Int len, const ::transfer::Frame& f, const ::Ice::Current& /* = ::Ice::Current */){
    	TargetPtr t1=targets.front();
    	Target* t=t1.get();
    	cout<<"Targets:"<<endl;
    	cout<<t->ip<<endl;
    	cout<<t->id<<endl;
    	cout<<"len:"<<endl;
    	cout<<len<<endl;
    	cout<<"Frame:"<<endl;
    	cout<<(byte*)&f[0]<<endl;
    	//create a new thread
    	
    }
    
    void sendFrame(byte *s,string ip){
    	/*
    	ACE_INET_Addr srvr (50000, ACE_LOCALHOST);
    
    	ACE_SOCK_Connector connector;
    	ACE_SOCK_Stream peer;
    
    	if (-1 == connector.connect (peer, srvr))
    		return;
    		//ACE_ERROR_RETURN ((LM_ERROR,
    		//ACE_TEXT ("%p\n"),
    		//ACE_TEXT ("connect")), 1);
    
    	int bc;
    	char buf[64];
    
    	peer.send_n ("uptime\n", 7);
    	bc = peer.recv (buf, sizeof(buf));
    	write (1, buf, bc);
    	peer.close ();
    	*/
    }
    
    int 
    main(int argc, char* argv[]) 
    { 
    	int status = 0; 
    	Ice::CommunicatorPtr ic; 
    	try { 
    		ic = Ice::initialize(argc, argv); 
    		Ice::ObjectAdapterPtr adapter 
    			= ic->createObjectAdapterWithEndpoints( 
    			"Transfer", "default -p 10000"); 
    		Ice::ObjectPtr object = new ServiceI; 
    		adapter->add(object, 
    			ic->stringToIdentity("SampleTransfer")); 
    		adapter->activate(); 
    		ic->waitForShutdown(); 
    	} catch (const Ice::Exception& e) { 
    		cerr << e << endl; 
    		status = 1; 
    	} catch (const char* msg) { 
    		cerr << msg << endl; 
    		status = 1; 
    	} 
    	if (ic) { 
    		try { 
    			ic->destroy(); 
    		} catch (const Ice::Exception& e) { 
    			cerr << e << endl; 
    			status = 1; 
    		} 
    	} 
    	return status; 
    }
    
  • dwayne
    dwayne St. John's, Newfoundland
    You should try moving your include of ace.h to the end of your includes. Please see this thread for more information.
  • Thanks for your attention!
    when I move ace.h to the end of include,it gives errors as follow:
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : see previous definition of 'AF_IPX'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: 'AF_MAX' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : see previous definition of 'AF_MAX'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: 'SO_DONTLINGER' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : see previous definition of 'SO_DONTLINGER'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: 'sockaddr' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : see declaration of 'sockaddr'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing '}' before 'constant'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing ';' before 'constant'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: syntax error : 'constant'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: syntax error : missing ';' before '}'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: 'IN_CLASSA' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : see previous definition of 'IN_CLASSA'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: 'IN_CLASSB' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : see previous definition of 'IN_CLASSB'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(530) : warning C4005: 'IN_CLASSC' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(299) : see previous definition of 'IN_CLASSC'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(541) : warning C4005: 'INADDR_ANY' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(304) : see previous definition of 'INADDR_ANY'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(543) : warning C4005: 'INADDR_BROADCAST' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(306) : see previous definition of 'INADDR_BROADCAST'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(577) : error C2011: 'sockaddr_in' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(312) : see declaration of 'sockaddr_in'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: 'fd_set' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : see declaration of 'fd_set'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(167) : warning C4005: 'FD_SET' : macro redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(102) : see previous definition of 'FD_SET'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(176) : error C2011: 'timeval' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(111) : see declaration of 'timeval'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(232) : error C2011: 'hostent' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(167) : see declaration of 'hostent'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(245) : error C2011: 'netent' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(180) : see declaration of 'netent'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(252) : error C2011: 'servent' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(187) : see declaration of 'servent'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(264) : error C2011: 'protoent' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(199) : see declaration of 'protoent'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(360) : error C2011: 'WSAData' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(322) : see declaration of 'WSAData'
    1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(458) : error C2011: 'sockproto' : 'struct' type redefinition
    1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(494) : see declaration of 'sockproto'

    It seems that all the socket's struct to be defined twice...any suggestions?3ks!
  • dwayne
    dwayne St. John's, Newfoundland
    Here is another thread that discusses using Ice and Ace. The thread is rather old so is no longer completely relevant to the latest version of Ice. Its conclusion is basically that it is best to separate your code so you do not require both ACE and Ice includes together.
  • My guess is that you built ACE without WINSOCK2 support.
    Check for something similar to #define ACE_HAS_WINSOCK2 0 in config-win32-common.h of your ACE.
    S.K.
  • I checked my ACE source file,and I found it with 1
    #define ACE_HAS_WINSOCK2
    

    Thanks, dwayne. I will try the way you said.:D