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