¸Õ´ÓÍøÉÏ¿´µ½cºÍjava»ì±àµÄÎÄÕ£¬¾Íؽ²»¿É´ýµÄ³¢ÊÔÁËһϡ£ºÇºÇ£¬Ð§¹û»¹ÊǺܺõġ£ÏÂÃæ½«×Ô¼º³É¹ûÕ³Ìù³öÀ´
£¨×ªÔØÓÚhttp://www.zxbc.cn/html/20070518/19986.html£©¡£ÊµÑéÖ®ºó¿ÉÒÔͨ¹ý¡£
1javaÖе÷ÓÃcÓïÑÔ
Ê×ÏȱàдMain.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
ÔÚÃüÁîÐÐÖУ¬Ê¹ÓÃÈçÏÂÃüÁî±àÒ룺
javac Main.java
ÏÂÃæµÄÃüÁÉú³ÉMain.hÍ·Îļþ
javah Main
´ò¿ªvs2008£¬ н¨¹¤³ÌMakeDll£¨win32 console application£©£¬ÉèÖÃÏîÄ¿ÊôÐÔÈçÏ£º
ÔÚproject-¡·MakeDll Properties-¡·ÔÚGeneralÑ¡ÏÉÏ£¬Ñ¡ÔñÉú³ÉdllÎļþ¡£
ͬʱÐèÒªÔÚÏîÄ¿µÄc++ÏÂgeneralϵÄAdditional include directoryϼÓÔØjdk°²×°Ä¿Â¼ÏµÄincludeÎļþ¼ÐºÍ¸ÃÎļþ¼ÐϵÄwin32
×ÓĿ¼¡£
½«µÚÒ»²½Éú³ÉµÄMain.hÎļþ¼ÙÈçµ½¹¤³ÌÖУ¬Í¬Ê±Ð½¨Ò»¸ömain.cppÎļþ£¬ÔÚÆäÖмÙÈçÈçÏ´úÂ룺
#include "Main.h"
#include <string.h>
JNIEXPORT jint JNICALL Java_Main_getStrNum (JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteA ......
¸Õ´ÓÍøÉÏ¿´µ½cºÍjava»ì±àµÄÎÄÕ£¬¾Íؽ²»¿É´ýµÄ³¢ÊÔÁËһϡ£ºÇºÇ£¬Ð§¹û»¹ÊǺܺõġ£ÏÂÃæ½«×Ô¼º³É¹ûÕ³Ìù³öÀ´
£¨×ªÔØÓÚhttp://www.zxbc.cn/html/20070518/19986.html£©¡£ÊµÑéÖ®ºó¿ÉÒÔͨ¹ý¡£
1javaÖе÷ÓÃcÓïÑÔ
Ê×ÏȱàдMain.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
ÔÚÃüÁîÐÐÖУ¬Ê¹ÓÃÈçÏÂÃüÁî±àÒ룺
javac Main.java
ÏÂÃæµÄÃüÁÉú³ÉMain.hÍ·Îļþ
javah Main
´ò¿ªvs2008£¬ н¨¹¤³ÌMakeDll£¨win32 console application£©£¬ÉèÖÃÏîÄ¿ÊôÐÔÈçÏ£º
ÔÚproject-¡·MakeDll Properties-¡·ÔÚGeneralÑ¡ÏÉÏ£¬Ñ¡ÔñÉú³ÉdllÎļþ¡£
ͬʱÐèÒªÔÚÏîÄ¿µÄc++ÏÂgeneralϵÄAdditional include directoryϼÓÔØjdk°²×°Ä¿Â¼ÏµÄincludeÎļþ¼ÐºÍ¸ÃÎļþ¼ÐϵÄwin32
×ÓĿ¼¡£
½«µÚÒ»²½Éú³ÉµÄMain.hÎļþ¼ÙÈçµ½¹¤³ÌÖУ¬Í¬Ê±Ð½¨Ò»¸ömain.cppÎļþ£¬ÔÚÆäÖмÙÈçÈçÏ´úÂ룺
#include "Main.h"
#include <string.h>
JNIEXPORT jint JNICALL Java_Main_getStrNum (JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteA ......
--Õª×Ô ¡¶Oracle Pro*C ³ÌÐò¿ª·¢¡· --Create/Modify Email£ºxingchengli@gmail.com
SQLDA µÄ½á¹¹ÈçÏ£º
struct SQLDA
{
long N; /* Descriptor size in number of entries */
char **V; Ptr to Arr of addresses of main variables */
long *L; /* Ptr to Arr of lengths of buffers */
short *T; /* Ptr to Arr of types of buffers */
short **I; * Ptr to Arr of addresses of indicator vars */
long F; /* Number of variables found by DESCRIBE */
char **S; /* Ptr to Arr of variable name pointers */
short *M; /* Ptr to Arr of max lengths of var. names */
short *C; * Ptr to Arr of current lengths of var. names */
char **X; /* Ptr to Arr of ind. var. name pointers */
short *Y; /* Ptr to Arr of max lengths of ind. var. names */
short *Z; /* Ptr to Arr of cur lengths of ind. var. names */
};
SQLDA½á¹¹³ÉÔ±×÷ÓÃÃèÊö£º
Ãû³Æ ÃèÊö
N SELECT-LISTÁлòռλ·ûµÄ×î´óÊýÁ¿£¬Ö´ÐÐDESCRIBEǰ±ØÐëÖ´ÐÐ
SQLSQLDAAlloc()º¯Êý¸øN½øÐи³Öµ£¬É趨ÃèÊöÊý×éµÄάÊý£¬Æä¾ö ......
¾¹ýÑéÖ¤¿ÉÒÔʵÏÖ£¬ÏȽ«ÊµÏÖ´úÂëÌù³ö£¬ÒÔ±¸ÒÔºóʹÓá£
±¾ÎÄĬÈÏÄãµÄjava¿ª·¢»·¾³ÒѾ°²×°³É¹¦£¬²¢ÇÒ¶ÔÓÚjavaÓïÑÔºÍc++ÓïÑÔÓйýÁ˽⡣
±àд²âÊÔÓÃÀࣺDemo.java
´úÂëÈçÏ£º
public class Demo
{
public static int COUNT = 8;
private String msg;
private int[] counts;
public Demo ()
{
this ("default constructor");
}
public Demo (String msg)
{
this.msg = msg;
this.counts = null;
}
public String getMessage ()
{
return msg;
}
public static String getHelloWorld ()
{
return "hello world!";
}
public String append (String str, int i)
{
return str + i;
}
public int[] getCounts ()
{
return counts;
}
public void setCounts (int[] counts)
{
this.counts = counts;
}
public void throwExcp () throws IllegalAccessExce ......
1.ÒýÑÔ
¡¡¡¡C++ÓïÑԵĴ´½¨³õÖÔÊÇ“a better C”£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³ÌʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª“²»³¹µ×µØÃæÏò¶ÔÏ󔣩£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£
¡¡¡¡2.´Ó±ê׼ͷÎļþ˵Æð
¡¡¡¡Ä³ÆóÒµÔø¾¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺
¡¡¡¡ÃæÊÔÌâ
¡¡¡¡ÎªÊ²Ã´±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
¡¡¡¡·ÖÎö
¡¡¡¡ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê“#ifndef __INCvxWorksh¡¢#define __INCvxWorksh¡¢#endif” µÄ×÷ÓÃÊÇ·ÀÖ¹¸ÃÍ·Îļþ±»Öظ´ÒýÓá£
¡¡¡¡ÄÇô
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
¡¡¡¡µÄ×÷ÓÃÓÖÊÇÊ²Ã´ÄØ£¿ÎÒÃǽ«ÔÚÏÂÎÄÒ»Ò»µÀÀ´¡£
¡¡¡¡3.Éî²ã½ÒÃÜextern "C"
¡¡¡¡extern "C" °üº¬Ë«Öغ¬Òå£ ......
1.ÒýÑÔ
¡¡¡¡C++ÓïÑԵĴ´½¨³õÖÔÊÇ“a better C”£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³ÌʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª“²»³¹µ×µØÃæÏò¶ÔÏ󔣩£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£
¡¡¡¡2.´Ó±ê׼ͷÎļþ˵Æð
¡¡¡¡Ä³ÆóÒµÔø¾¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺
¡¡¡¡ÃæÊÔÌâ
¡¡¡¡ÎªÊ²Ã´±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
¡¡¡¡·ÖÎö
¡¡¡¡ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê“#ifndef __INCvxWorksh¡¢#define __INCvxWorksh¡¢#endif” µÄ×÷ÓÃÊÇ·ÀÖ¹¸ÃÍ·Îļþ±»Öظ´ÒýÓá£
¡¡¡¡ÄÇô
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
¡¡¡¡µÄ×÷ÓÃÓÖÊÇÊ²Ã´ÄØ£¿ÎÒÃǽ«ÔÚÏÂÎÄÒ»Ò»µÀÀ´¡£
¡¡¡¡3.Éî²ã½ÒÃÜextern "C"
¡¡¡¡extern "C" °üº¬Ë«Öغ¬Òå£ ......
תÌù×Ô£ºhttp://blog.sina.com.cn/s/blog_629562fe0100gs2l.html
ÉÔ×÷ÐÞ¸Ä
gSOAPÊÇÒ»¸ö¿äƽ̨µÄ£¬ÓÃÓÚ¿ª·¢Web Service·þÎñ¶ËºÍ¿Í»§¶ËµÄ¹¤¾ß£¬ÔÚWindows¡¢Linux¡¢MAC OSºÍUNIXÏÂʹÓÃCºÍC++ÓïÑÔ±àÂ룬¼¯³ÉÁËSSL¹¦ÄÜ¡£
ÏÂÔØµØÖ·£ºhttp://sourceforge.net/projects/gsoap2
¹Ù·½ÍøÕ¾£ºhttp://genivia.com/Products/gsoap/index.html
Ò»¡¢·þÎñÆ÷¶Ë
1¡¢Ê×Ïȱàд add.hÎļþ£º£¨ÎÒÊÔ¹ý°ÑÕâЩעÊÍÈ«²¿É¾³ýҲûÓÐÎÊÌ⣩
//gsoap ns service name: add
//gsoap ns service namespace: http://mail.263.net/add.wsdl
//gsoap ns service location: http://mail.263.net
//gsoap ns service executable: add.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:add
int ns__add( int num1, int num2, int* sum );
2¡¢ÓÃgsoap/binĿ¼ÏµÄsoapcpp2.exe³ÌÐò£¬Éú³ÉһЩÎļþ¡£
·½·¨£ºÓÃcmdÖ´ÐÐsoapcpp2.exe add.h¡£
soapcpp2.exe¿ÉÒÔ´ø²ÎÊýÖ´ÐУ¬¾ßÌåÖ´ÐÐsoapcpp2.exe -h²é¿´¡£(ʾÀý£ºhttp://www.cppprog.com/2009/0723/138_2.html)
ÔÚÕâ¸öĿ¼Ï»á×Ô¶¯Éú³ÉÐí¶à½«À´ÓÐÓõÄÎļþ£¬Èçadd.namap,soapH.h,soapC.cpp,soapClient.cpp,soapServer. ......
1£ºÃ¿Ò»¸ö±äÁ¿ÔÚʹÓÃǰ¶¼µÃÉùÃ÷£¬²»È»ÔÚʹÓõÄʱºò¾ÍÓпÉÄÜÊÇËæ»úµÄÊý×Ö
2£º×¢ÒâÍ·ÎļþÖк¯ÊýÉùÃ÷µÄʱºòÒªÔÚºóÃæ¼ÓÉÏ·ÖºÅ
3£º×¢Òâ´®¿Ú¿ÉÒÔ´òÓ¡±äÁ¿£¬¾ÍÏñCÖеÄprintfÒ»Ñù
4£ºDNWÖв»ÄÜ´òÓ¡floatÐÍÊý¾Ý
5£º×¢Òâ½á¹¹ÌåÖ¸ÕëÊý×é µÄʹÓú͵÷ÓÃ
6£º ......