2016-08-17 13 views
0

私のアプリケーションにヘッダーとしてリンクされているcppファイルがあります。これらのcppファイルとヘッダーファイルは他のアプリケーションでも使用されます。 iphone用のプリプロセッサマクロを定義するにはどうすればよいのですか。アプリケーションがビルドされるときには、他のプラットフォーム用のiOS用の関数を使用します。例えばiOSのプリプロセッサマクロを定義します。

:iOSのではなく、単純なソケット私が使用した機能を接続すると接続する際の接続機能がgetaddrinfo_compact使用していますので、

はどのようなマクロを定義します。

bool SocketSender::Connect (const char *host, int port, CApiError &err) 
{ 

errno = 0; 
struct hostent *hostinfo; 

//struct in6_addr ipv6addr; 


hostinfo = gethostbyname(host); 

struct addrinfo hints, *res, *res0; 
int error,result; 
const char *cause = NULL; 

memset(&hints, 0, sizeof(hints)); 
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_STREAM; 
//hints.ai_flags = AI_DEFAULT; 
hints.ai_protocol = 0; 
error = getaddrinfo_compat(host, boost::to_string(port).c_str(), &hints, &res0); 
if (error) { 
    errx(1, "%s", gai_strerror(error)); 
    /*NOTREACHED*/ 
} 

getaddrinfo_compact

static int getaddrinfo_compat(
          const char * hostname, 
          const char * servname, 
          const struct addrinfo * hints, 
          struct addrinfo ** res 
         ) { 
int err; 
int numericPort; 

// If we're given a service name and it's a numeric string, set `numericPort` to that, 
// otherwise it ends up as 0. 

numericPort = servname != NULL ? atoi(servname) : 0; 

// Call `getaddrinfo` with our input parameters. 

err = getaddrinfo(hostname, servname, hints, res); 

// Post-process the results of `getaddrinfo` to work around <rdar://problem/26365575>. 

if ((err == 0) && (numericPort != 0)) { 
    for (const struct addrinfo * addr = *res; addr != NULL; addr = addr->ai_next) { 
     in_port_t * portPtr; 

     switch (addr->ai_family) { 
      case AF_INET: { 
       portPtr = &((struct sockaddr_in *) addr->ai_addr)->sin_port; 
      } break; 
      case AF_INET6: { 
       portPtr = &((struct sockaddr_in6 *) addr->ai_addr)->sin6_port; 
      } break; 
      default: { 
       portPtr = NULL; 
      } break; 
     } 
     if ((portPtr != NULL) && (*portPtr == 0)) { 
      *portPtr = htons(numericPort); 
     } 
    } 
} 
return err; 
} 

答えて

0

あなたが(設定などのすべてのためにそれを設定する 'プリプロセッサマクロ' の下でターゲットのビルド設定で

IOSBUILD=1

のようなものを定義することができますデバッグとリリース)。 C++のコードで次に

enter image description here

は、あなたが、これはiOSのビルドであるかどうかを確認することができます。彼らはあまりにもIOSBUILDを定義することを決定しない限り、他のアプリケーションを混乱はありません

#ifdef IOSBUILD 
    // Use the compat version. 
#else 
    // Use the original version. 
#endif 

何らかの理由で。

関連する問題