C语言调用powerBuilder开发数据库

来源:岁月联盟 编辑:exp 时间:2012-09-29

C语言编写数据库系统不方便,可以使用权PBNI接口来操作powerbuilder,开发数据库轻松。

[cpp]
// pbtest.cpp : Defines the entry point for the console application. 
// 
 
#include "stdafx.h" 
#include "stdio.h" 
 
typedef PBXEXPORT PBXRESULT (*P_PB_GetVM)(IPB_VM** vm); 
 
int main(int argc, char* argv[]) 

 IPB_Session* session;    
 IPB_VM* pbvm = NULL;    //Load the PowerBuilder VM module    
 HINSTANCE hinst = LoadLibrary("pbvm90.dll");    
  
 if ( hinst== NULL)  
  return 0;    
 fprintf(stderr, "Loaded PBVM successfully/n"); 
  
 P_PB_GetVM getvm = (P_PB_GetVM)GetProcAddress      (hinst,"PB_GetVM");   
 if (getvm == NULL) return 0;     
 getvm(&pbvm);   
 if (pbvm == NULL) return 0; 
  
 LPCTSTR LibList[] = {"genapp.dll"};    
 if ( pbvm->CreateSession("genapp", LibList, 1,      &session) != PBX_OK )   
 {     
  fprintf(stderr, "Error in CreateSession/n");     
  return 1;   
 }  
 fprintf(stderr, "Created session successfully/n"); 
  
 pbgroup group = session->FindGroup("nvo_mult",      pbgroup_userobject);   
 if (group == NULL)  
  return 0;      // Now find the class nvo_mult in the group    
  
 pbclass cls = session->FindClass(group,"nvo_mult");   
 if (cls == NULL) 
  return 0;      // Create an instance of the PowerBuilder object   
 pbobject pbobj = session->NewObject(cls); 
  
 PBCallInfo ci;     // To call the class member function f_mult,    // pass its signature as the last argument   // to GetMethodID     
  
 pbmethodID mid = session->GetMethodID(cls, "f_mult",      PBRT_FUNCTION, "III");    // Initialize call info structure based on method ID   
 session->InitCallInfo(cls, mid, &ci); 
  
 ci.pArgs-> GetAt(0)->SetInt(10);   
 ci.pArgs-> GetAt(1)->SetInt(20); 
  
 try   {       
  session->InvokeObjectFunction(pbobj, mid, &ci);       // Was PB exception thrown?      
  if (session->HasExceptionThrown())       
  {         // Handle PB exception         
   session->ClearException();      
  }    
 }   catch (...)   
 {      // Handle C++ exception   
 }    // Get the return value and print it to the console   
 pbint ret = ci.returnValue->GetInt();    
 fprintf(stderr, "The product of 123 and 45 is %i/n",    ret); 
  
 session->FreeCallInfo(&ci);   
 //delete &ci;    // Release session    
 session->Release();   
  
  
 return 0; 
 FreeLibrary(hinst); 

图片内容