C语言调用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); 

An unexpected error has been detected by HotSpot Virtual Machine:

#

[cpp] // pbtest.cpp : Defines the entry point for the console
appl...

生成如下头文件 JNI_JAVA.h 的片段:

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

//下面的alive1,alive2是我故意输出的
[size=xx-small]alive1

}
[/size]

Problematic frame:

作为练习,为了在C代码中调用java的System.out.println()方法,我写了如下代码。

JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。
症状如下:

[/size]

If you would like to submit a bug report, please visit:

执行到
jmethodID mid_println = .GetMethodID(env, obj_out, "println",
"(Ljava/lang/String;)V");
这一句时程序会死掉,同时给出以下输出:

alive2
#

An error report file with more information is saved as hs_err_pid11192.log

#

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。