visual studio 2008でのpro*C開発方法
本ページではvisual studio 2008 VC++ を用いてpro*Cの開発をする手順をまとめます。 使用した環境は以下の通りです。| OS | Windows XP SP3 Proffetional x86 |
| 開発環境 | Visual studio 2008 VC++ |
| ソースの言語 | C言語 |
| データベースのバージョン | 10.2 |
手順
1 プロジェクトを作成するプロジェクトの種類はここでは「win32」の「コンソールアプリケーション」を選択します。この際以下の2点を注意してください。
・「CLR」は.netのランタイムを使用するプログラム開発用のプロジェクトでpro*Cが使用するライブラリは.net環境用のライブラリ(マネージライブラリ)ではありませんのでそのままでは利用できません。
・「プリコンパイル済みヘッダー」のチェックは外してください。pro*Cがプリコンパイルしたソースはプリコンパイル済みヘッダーの設定と競合するためそのままではコンパイルできません。
2 メインソースの拡張子をpcに変更登録する
デフォルトで作成されるソースの拡張子はC++用の拡張子(.cpp)となっているのでpro*Cソース用のデフォルト拡張子の.pcに変更します。
3 拡張子.cの空ファイルを登録する
プリコンパイル後ソースが拡張子.cのファイルで作成されるためメインのソース名に拡張子を.cに変更した空ファイルを登録します。
4 プロジェクトの設定を変更する
設定内容は以下です。
・「追加のインクルードディレクトリ」にプリコンパイラ用のincludeファイル(%ORACLE_HOME%\precomp\public)を設定する
・「コンパイル言語の選択」でC++ではなくCとしてコンパイルするようにする
・「追加の依存ファイル」にてプリコンパイラ用の関数が参照するライブラリを追加する(%ORACLE_HOME%\precomp\LIB\orasql10.lib)
・ビルド前に実行する処理としてprocコマンドによるプリコンパイルコマンドを設定する
5 ソースを変更する
今回は以下のサンプルソースを使用しました。このソースはscottユーザのdept表を必要とします。 また、フォントが斜線になっている箇所(ユーザ、パスワード、SID)は環境に合わせて変更します。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
varchar uid[64];
varchar pwd[64];
varchar sid[64];
varchar dname[40];
EXEC SQL END DECLARE SECTION;
void sql_error(char* msg)
{
char err_msg[128];
size_t buf_len, msg_len;
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n%s\n", msg);
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s\n", msg_len, err_msg);
EXEC SQL ROLLBACK RELEASE;
exit(EXIT_FAILURE);
}
int main()
{
//ユーザ名、パスワードセット
strcpy((char *)uid.arr,"SCOTT");
uid.len = strlen((char *)uid.arr);
strcpy((char *)pwd.arr,"TIGER");
pwd.len = strlen((char *)pwd.arr);
strcpy((char *)sid.arr,"ORCL102");
sid.len = strlen((char *)sid.arr);
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
//接続
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd using :sid;
//CURSORを使用してループ
EXEC SQL DECLARE CUR1 CURSOR FOR
SELECT DNAME FROM DEPT;
EXEC SQL OPEN CUR1;
printf("PRINT DEPT START");
for ( ; ;)
{
EXEC SQL WHENEVER NOT FOUND GOTO nodept;
EXEC SQL FETCH CUR1 INTO :dname;
printf("\n %s",dname.arr);
EXEC SQL WHENEVER NOT FOUND STOP;
}
EXEC SQL CLOSE CUR1;
nodept:
printf("\nPRINT DEPT END\n");
return 0;
}
6 ソースをビルドするソースをビルドし、エラーなく終了するか確認します。
以下はソースビルド時のログとなります。
1>------ ビルド開始: プロジェクト: proc_vc, 構成: Debug Win32 ------ 1>ビルド前のイベントを実行しています... 1>Pro*C/C++: Release 10.2.0.4.0 - Production on 土 4月 9 00:54:53 2011 1>Copyright (c) 1982, 2007, Oracle. All rights reserved. 1>システムのデフォルト・オプション値: E:\oracle\product\10.2.0\db_1\precomp\admin\pcscfg.cfg 1>コンパイルしています... 1>stdafx.cpp 1>コンパイルしています... 1>proc_vc.c 1>e:\program\vc\proc_vc\proc_vc\proc_vc.c(280) : warning C4013: 関数 'sqlglm' は定義されていません。int 型の値を返す外部関数と見なします。 1>e:\program\vc\proc_vc\proc_vc\proc_vc.c(306) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : 'strcpy' の宣言を確認してください。 1>e:\program\vc\proc_vc\proc_vc\proc_vc.c(308) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : 'strcpy' の宣言を確認してください。 1>e:\program\vc\proc_vc\proc_vc\proc_vc.c(310) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : 'strcpy' の宣言を確認してください。 1>マニフェストをリソースにコンパイルしています... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>リンクしています... 1>マニフェストを埋め込んでいます... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>ビルドログは "file://e:\program\VC\proc_vc\proc_vc\Debug\BuildLog.htm" に保存されました。 1>proc_vc - エラー 0、警告 4 ========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========7 ビルドしたプログラムを実行する
ビルドが成功するとプロジェクトディレクトリ配下に\Debug\proc_vc.exeが出力されます。 コマンドラインから実行し、dept表のDNAME列の値が出力されることを確認します。
C:\Documents and Settings\Administrator>cd /d E:\program\VC\Debug E:\program\VC\Debug>proc_vc.exe PRINT DEPT START ACCOUNTING RESEARCHNG SALESRCHNG OPERATIONS PRINT DEPT END

折りたたみ
展開