你的程序有没有用WSAStartup来初始化,OCI 好象用到了SOCKET了,所以好象需要这一句。 WSADATA wsaData;
int err = WSAStartup(MAKEWORD( 1, 1 ), &wsaData );
if (err != 0)
{
return FALSE;
}

解决方案 »

  1.   

    不是这个问题,我用的是oci 例子msvc版,里面有初始化oci环境的代码. (void) OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,
                           (dvoid * (*)(dvoid *, size_t)) 0,
                           (dvoid * (*)(dvoid *, dvoid *, size_t))0,
                           (void (*)(dvoid *, dvoid *)) 0 );  (void) OCIEnvInit( (OCIEnv **) &envhp, OCI_DEFAULT, (size_t) 0,
                         (dvoid **) 0 );  (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR,
                       (size_t) 0, (dvoid **) 0);  /* server contexts */
      (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER,
                       (size_t) 0, (dvoid **) 0);  (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &svchp, OCI_HTYPE_SVCCTX,
                       (size_t) 0, (dvoid **) 0);  (void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);  /* set attribute server context in the service context */
      (void) OCIAttrSet( (dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp,
                         (ub4) 0, OCI_ATTR_SERVER, (OCIError *) errhp);  (void) OCIHandleAlloc((dvoid *) envhp, (dvoid **)&authp,
                            (ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0);  (void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
                     (dvoid *) username, (ub4) strlen((char *)username),
                     (ub4) OCI_ATTR_USERNAME, errhp);  (void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
                     (dvoid *) password, (ub4) strlen((char *)password),
                     (ub4) OCI_ATTR_PASSWORD, errhp);  checkerr(errhp, OCISessionBegin ( svchp,  errhp, authp, OCI_CRED_RDBMS,
                              (ub4) OCI_DEFAULT));  (void) OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX,
                       (dvoid *) authp, (ub4) 0,
                       (ub4) OCI_ATTR_SESSION, errhp);  checkerr(errhp, OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &stmthp,
               OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));  checkerr(errhp, OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &stmthp1,
               OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));  /* Retrieve the current maximum employee number. */
      checkerr(errhp, OCIStmtPrepare(stmthp, errhp, maxemp,
                                    (ub4) strlen((char *) maxemp),
                                    (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT));  /* bind the input variable */
      checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (dvoid *) &empno,
                       (sword) sizeof(sword), SQLT_INT, (dvoid *) 0, (ub2 *)0,
                       (ub2 *)0, OCI_DEFAULT));