程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle調用外部程序C++常見問題解決

Oracle調用外部程序C++常見問題解決

編輯:關於Oracle數據庫

  創建的 library  

   createorreplacelibraryMYLIB
  as'D:installedoracleora92bintest1.dll';

  dll 中定義了一個方法 int fnTest1(void) 返回一個數字

  函數

   CREATEORREPLACEFUNCTIONmytest1RETURNDOUBLEPRECISIONAS
  LANGUAGECNAME"fnTest1"
  LIBRARYMYLIB
  PARAMETERS(RETURNDOUBLE);

  說明: 

   ORA-28575:unabletoopenRPCconnectiontoexternalprocedureagent

  解決:  

   1.tnsnames.ora需要配置EXTPROC_CONNECTION_DATA
  EXTPROC_CONNECTION_DATA=
  (DESCRIPTION=
  (ADDRESS_LIST=
  (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
  (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
  )
  (CONNECT_DATA=
  (SID=PLSExtProc)
  (PRESENTATION=RO)
  )
  (CONNECT_DATA=
  (SID=ora10g)
  (PRESENTATION=RO)
  )
  )

  2. listener.ora 需要配置 (PROGRAM = extproc) 

   SID_LIST_LISTENER=
  (SID_LIST=
  (SID_DESC=
  (SID_NAME=PLSExtProc)
  (ORACLE_HOME=D:oracleproduct10.2.0db_1)
  (PROGRAM=extproc)
  )
  (SID_DESC=
  (SID_NAME=ora10g)
  (ORACLE_HOME=D:oracleproduct10.2.0db_1)
  )
  )
  ORA6521PL/SQL:Errormappingfunction

  解決:

   Note:297906.1 
  Cause 
  UsageofC++file(*.cpp)insteadofCfile(*.c)assourceforbuildingtheDLL 
  Thelibrarygeneratedcontainsthefunctionwiththedecoratednamewhichismangledbydefault 
  Solution 
  Toimplementthesolution,pleaseusethefollowingcodeforthe*.cppcode: 
  #ifdef__cplusplus 
  extern"C"{ 
  #endif 
  int__declspec(dllexport)square_of(intx) 
  { 
  return(x*x); 
  } 
  #ifdef__cplusplus 
  } 
  #endif

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved