日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java调用dll 指针参数_java调用c dll,指针参数和结构体参数搞定

發布時間:2024/3/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java调用dll 指针参数_java调用c dll,指针参数和结构体参数搞定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

終于有了比較大的成果,不過身體也累完了,昨天又去打的吊瓶,坐成鐵的時候差點就暈倒在里面了,不知道什么原因,抵抗力這么差,明天放假,要在家好好休息,今天早上碰到歡歡了,她說給我做好吃的,我愿意吃她做的糖醋排骨,呵呵,還是把我的研究成果紀錄下來吧!

基于上兩篇java調用dll的文章,我做了更為復雜的參數傳遞,指針變量和結構體變量,下面給出源碼

vc++中的工程名稱是SMSXIAO

Source?Files(源文件):.c文件名:sms.c

源碼:

#include?"sms.h"

int?SmsInit(void)

{

printf("welcome");

return?1;

}

int?SmsSend(char?*phonenum,?char?*content)

{

printf("liuxiao");

printf("%s?%s",phonenum,content);

return?2;

}

int?SmsRead(int?x,SmsEntry?*entry)

{

int?i;

printf("mingxin");

printf("%d",x);

for?(i=0;i<2;i++)

{

printf("%f",entry->text[i]);

}

return?3;

}

所對應的Header?Files(頭文件)?.h文件名:sms.h

源碼:

/*

*?SMS?API

*?Author:?liuxiao

*?Date:?2007.2.2

*/

#ifndef?_TX_SMS_H_

#define?_TX_SMS_H_

#ifdef?__cplusplu*

**tern?"C"?{

#endif

typedef?struct?tagSmsEntry?{

int?index;

double?text[40];

}?SmsEntry;

int?SmsInit(void);?//無參數

int?SmsSend(char?*phonenum,?char?*content);?//指針變量參數

int?SmsRead(int?x,SmsEntry?*entry);?//結構體參數

#ifdef?__cplusplus

}

#endif

#endif

有了上述的兩個文件,就說明sms.h是別人給你的接口,你要通過java去調用相應的方法,而sms.c?是模擬的

測試類,下面需要做的是java程序

Java?Source(java原碼)?.java文件名:SendSMS.java

源碼:

public?class?SendSMS?{

public?native??int?SmsInit();

public?native??int?SmsSend(byte[]?mobileNo,?byte[]?smContent);

public???native???int?SmsRead(int??x,int?y,double[]??cText);

public?static?void?main(String[]?args)?{

System.loadLibrary("SMSXIAO");

int?x=1;int?y=3;

double[]???text=???new???double[40];?text[0]?=1.1;text[1]?=1.2;

byte[]?mobileno?=?{?0x31,?0x33,?0x36,?0x36,?0x31,?0x36,?0x33,?0x30,?0x36,?0x36,?0x37,

0x00};

String?smscontentemp?=?"早上好";

byte[]?temp?=?{0};

try?{

byte[]?smscontentdb?=?smscontentemp.getBytes("gbk");

byte[]?smscontent?=?new?byte[smscontentdb.length?+?temp.length];

System.arraycopy(smscontentdb,?0,?smscontent,?0,?smscontentdb.length);

System.arraycopy(temp,?0,?smscontent,?smscontentdb.length,?temp.length);

SendSMS?sendSMS?=?new?SendSMS();

sendSMS.SmsInit();

sendSMS.SmsRead(x,y,text);

if?(sendSMS.SmsSend(mobileno,?smscontent)?>=?0)?{

System.out.println("success!");

}

else?{

System.out.println("failed!");

}

}catch?(Exception?ex)?{}

}

}

javac?SendSMSjava生成.class文件,javach?SendSMS生成.h文件,按照上編日志,把.h文件導入工程的

Header?Files里。

相對于SendSMS.h文件要寫出SendSMS.c文件,目的是生成自己的.dll庫文件供java去調用。

.c文件名:SendSMS.c

源碼:

#include?

typedef?struct?chuanStruts

{

int?y;

double?doubletext[40];

}smsstruts;

JNIEXPORT?jint?JNICALL?Java_SendSMS_SmsInit(JNIEnv?*ev,?jobject?obj)

{

return?SmsInit();//調用sms.c里的SmsInit方法

}

JNIEXPORT?jint?JNICALL?Java_SendSMS_SmsSend(JNIEnv?*ev,?jobject?obj,?jbyteArray?mobileno,?jbyteArray?smscontent)

{

char?*?psmscontent?;

//jsize?thearraylengthj?=?(*env)->getarraylength(env,mobileno);

jbyte?*?arraybody?=?(*ev)->GetByteArrayElements(ev,mobileno,0);

char?*?pmobileno?=?(char?*)arraybody;

printf("[%s]/n?",?pmobileno);

//jsize?size?=?(*env)->getarraylength(env,smscontent);

arraybody?=?(*ev)->GetByteArrayElements(ev,smscontent,0);

psmscontent?=?(char?*)arraybody;

return?SmsSend(pmobileno,psmscontent);?//調用sms.c里的SmsSend方法

}

JNIEXPORT?jint?JNICALL?Java_SendSMS_SmsRead?(JNIEnv?*ev,?jobject?obj,?jint?x,jint?y,?jdoubleArray?doubletext)

{

smsstrut*?**ample;//自己構建的example結構體變量

double?*?psmscontent?;

int?i;

jdouble?*?arraybody?=?(*ev)->GetDoubleArrayElements(ev,doubletext,0);

psmscontent?=?(double?*)arraybody;

printf("%f",*psmscontent);

printf("%f",*(psmscontent+1));

example.y=?y;

for?(i=0;i<2;i++)

{

example.doubletext[i]?=?*(psmscontent+i);

}

return?SmsRead(x,&example);??//調用sms.c里的SmsRead方法

}

如果沒有出錯,則此時生成動態鏈接庫成功.?此時的SMSXIAO.dll,就應該在你工程的Debug中

把動態鏈接庫SMSXIAO.dll拷貝到TSendSMS.class所在的目錄下,java?SMSXIAO?就可以看到結果了!

總結

以上是生活随笔為你收集整理的java调用dll 指针参数_java调用c dll,指针参数和结构体参数搞定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。