0

Visual Studio 2005 で Oracle C++ Call Interface (OCCI) を使用してアプリケーションを開発するための開発環境を立ち上げて実行しようとしています。

私のシステム仕様は次のとおりです。 OS: Windows 7、64 ビット Oracle: 11g リリース 11.2.0.2、32 ビット Instant Client: BasicLite および SDK バージョン 11.2.0.4 32 ビット Visual Studio 2005 Professional Edition バージョン 8.0 (32 ビット ツールが有効)

私はMark Williams によるこのガイドに従いました。サンプルを実行しましたが、リリース モードでのみ実行しました。デバッグ モードに切り替えるとアプリはビルドされますが、実行すると次のエラーが発生します。

Problem signature:
Problem Event Name: APPCRASH
Application Name:   OCCITest.exe
Application Version:    0.0.0.0
Application Timestamp:  53f5dfdd
Fault Module Name:  KERNELBASE.dll
Fault Module Version:   6.1.7601.18229

このエラーを引き起こす小さなサンプル プログラムは次のとおりです。

#include "employees.h"

using namespace std; 
using namespace oracle::occi;

int main (void) 
{ 
  Employees *pEmployees = new Employees();
  delete pEmployees;
  return 0; 
}

Employees::Employees() 
{      
  user = "hr"; 
  passwd = "hr"; 
  db = "localhost:1521/service_name";
  env = Environment::createEnvironment(Environment::DEFAULT);

  try 
  { 
    con = env->createConnection(user, passwd, db); 
  } 
  catch (SQLException& ex) 
  { 
    cout << ex.getMessage();
    exit(EXIT_FAILURE); 
  } 
}

Employees::~Employees() 
{ 
  env->terminateConnection (con);
  Environment::terminateEnvironment (env); 
}

OCCI 機能へのすべての呼び出しを削除しても、アプリケーションはクラッシュしません。つまり、このプログラムはエラーなしで実行されます。

#include "employees.h"

using namespace std; 
using namespace oracle::occi;

int main (void) 
{ 
  Employees *pEmployees = new Employees();
  delete pEmployees;
  return 0; 
}

Employees::Employees() 
{ 
  user = "hr"; 
  passwd = "hr"; 
  db = "localhost:1521/service_name";
  cout<<"Look at me, I'm running"<<endl;
}

Employees::~Employees() 
{}

ガイドの中で、Mark は、デバッグ モードで実行する場合、リンカはライブラリ ファイル oraocci11d.lib を使用する必要があると述べています。ただし、このファイルは Instant Client SDK バージョン 11.2.0.4 には含まれていないため、リリース バージョンとデバッグ バージョンの両方に入力ファイル oraocci11.lib を使用しています。

この問題を解決する方法についてのアイデアが不足しています。すべての助けをいただければ幸いです。

4

3 に答える 3

0

デバッグ環境が機能するまでにはかなりの時間がかかったので、自分の質問に答えようと思いました。

試練の中でさまざまなエラーが発生しましたが、最も行き詰まったエラーは次のようなエラーでした。

「アプリケーションを正しく起動できませんでした (0xc0150002)。[OK] をクリックしてアプリケーションを閉じます。

また、http://www.dependencywalker.comoraocci11d.dllを使用したところ、次のいずれかまたは次のリストdll'sが見つからないと繰り返し言われました。

API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL 
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
IESHIMS.DLL

ただし、実際に欠けていたのは、実行可能ファイルがoci.dll. 他の誰かがこれらに遭遇した場合に備えて、エラーについて言及しているだけです。

これを機能させるために必要なものは次のとおりです。

まず、Instant Client にはoraocci11d.libまたはが含まれていないoraocci11d.dllため、完全な Oracle Client をインストールする必要があります。

次に、以下を PATH に追加する必要があります。

  • C:\Program Files\Oracle\11.2.0\OCI\lib\MSVC\vc8
  • C:\Program Files\Oracle\11.2.0\BIN

Visual Studio で、[ツール] -> [オプション] を選択し、[プロジェクトとソリューション] を展開して、[VC++ ディレクトリ] を選択します。[ディレクトリを表示] の下:

  • インクルード ファイルの追加C:\Program Files\Oracle\11.2.0\OCI\include
  • ライブラリ ファイルの追加C:\Program Files\Oracle\11.2.0\OCI\lib\MSVC\vc8

プロジェクトのプロパティ ページで、[構成プロパティ] -> [リンカー] の下にある [入力] を選択し、[追加の依存関係] の下に追加しますoraocci11d.lib(またはoraocci11.libリリース モードの場合)。次に、構成マネージャーでデバッグ/リリース モードを選択します。

于 2014-08-27T11:12:57.983 に答える