This discussion is archived
1 Reply Latest reply: Mar 6, 2013 6:41 AM by 943610 RSS

execute pro*c in c++/cli environment

JosephHwang Newbie
Currently Being Moderated
I try to execute oracle pro*c in c++/cli project, but it throws exception. This is my code.

=== oracle_connect.pc

#include <stdio.h>
#include <sqlca.h>

EXEC SQL BEGIN DECLARE SECTION;

#define UNAME_LEN 30
#define PWD_LEN 30

VARCHAR uid[UNAME_LEN];
VARCHAR pwd[PWD_LEN];

EXEC SQL END DECLARE SECTION;

void main(){

strncpy((char *) uid.arr, "scott", UNAME_LEN);
uid.len = (short)strlen((char*)uid.arr);
uid.arr[uid.len] = '\0';


strncpy((char *) pwd.arr, "tiger", PWD_LEN);
pwd.len = (short)strlen((char*)pwd.arr);
pwd.arr[pwd.len] = '\0';


EXEC SQL CONNECT :uid IDENTIFIED BY :pwd ;

if (sqlca.sqlcode != 0){
printf("Error : [%s].\n", sqlca.sqlerrm.sqlerrmc);


exit(0);
}


printf("Connected !");

exit(0);
}

====== exec_proc.cpp in c++/cli project

ProcessStartInfo^ pStartInfo1 = gcnew ProcessStartInfo();
pStartInfo1->FileName = "proc.exe";
pStartInfo1->UseShellExecute = false;
pStartInfo1->RedirectStandardOutput = true;
pStartInfo1->WindowStyle = ProcessWindowStyle::Hidden;
pStartInfo1->Arguments = "oracle_connect.pc";

ProcessStartInfo^ pStartInfo2 = gcnew ProcessStartInfo();
pStartInfo2->FileName = "cl.exe";
pStartInfo2->UseShellExecute = false;
pStartInfo2->RedirectStandardOutput = true;
pStartInfo2->WindowStyle = ProcessWindowStyle::Hidden;
String^ arg1 = " /I C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\precomp
public";
String^ arg2 = " /I \"C:
Program Files (x86)
Microsoft Visual Studio 10.0\\VC\\include\"";
String^ arg3 = " /link C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\precomp\\LIB
ORASQL11.LIB /LIBPATH:\"C:
Program Files (x86)
Microsoft Visual Studio 10.0\\VC\\lib\"";


pStartInfo2->Arguments = arg1 + arg2 +" oracle_connect.c" + arg3 ;

try {
Process^ exeP = Process::Start(pStartInfo1);

StreamReader^ reader = exeP->StandardOutput;

String^ result = reader->ReadToEnd();


Console::Write(result);

Console::ReadLine();


Process^ exeK = Process::Start(pStartInfo2);

StreamReader^ sReader = exeK->StandardOutput;

String^ resultR = sReader->ReadToEnd();


Console::Write(resultR); *// Throws error messages*

Console::ReadLine();
}
catch ( Exception^ e){
Console::WriteLine(e->Message);
Console::ReadLine();
}

The errors are

error LNK 2019 : unresolved external symbol "exit" ( and "printf", "strlen", "strncpy").....

I think linking of proc lib is failed, but i don't know what is wrong...
I need your help! Thanks in advance.
  • 1. Re: execute pro*c in c++/cli environment
    943610 Newbie
    Currently Being Moderated
    The problem is not with proc, but with the C compiler environment.
    Launch Visual Studio command prompt and try to compile the generated .c file with cl.exe .
    These argumenth aren't needed:
    " /I \"C:
    Program Files (x86)
    Microsoft Visual Studio 10.0\\VC\\include\"";
    
     /LIBPATH:\"C:
    Program Files (x86)
    Microsoft Visual Studio 10.0\\VC\\lib\"

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points