java调用dll传参_求教高手:有关DLL调用中参数传递问题???

使用JNI调用DLL中的函数,DLL中函数原形:

SendMsg(long CommIndex,char * Msg,bool Chinese);

在JAVA类中写成如下声明:

public native long MySendMsg(long CommIndex,String Msg,boolean Chinese);

JAVA中调用如下:

System.out.println(mysm.MySendMsg(1,"参数传递测试abcd",true));

结果经测试long与boolean类型的参数可以正确传递到DLL函数,而String类型参数传递不成功,请问char *在JAVA中如何定义,在JAVA中调用带String类型参数的函数应该如何附值呀?

谢谢!

|

下面是我以前写的部分代码,中文绝对没有任何问题,分别是从String到char*和从char*到String的转化,可以参考一下

//函数ChgStringNativeChars,用以将java的String类型转化为C++的字符串

//要转化的Java的String放在jstr中,返回结果在str中

//返回值:

//0错误

//1成功

int ChgStringNativeChars( JNIEnv *env, jobject jstr, char *str, int strlen ) {

jclassJClsString;//java的String类的类指针

jmethodIDJMthdStringGetbytes;//java的String类的getbytes方法ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过Java程序调用Kettle的API来向Job和Transformation传递参。以下是一个示例代码: ```java import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.variables.Variables; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryDirectoryInterface; import org.pentaho.di.repository.kdr.KettleDatabaseRepository; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.TransParameterCodec; import java.util.HashMap; import java.util.Map; public class KettleJobCaller { public static void main(String[] args) throws KettleException { KettleEnvironment.init(); String repositoryName = "MyRepository"; String username = "admin"; String password = "password"; String jobName = "MyJob"; String transformationName = "MyTransformation"; String[] parameters = new String[]{"param1=value1", "param2=value2"}; Repository repository = new KettleDatabaseRepository(); repository.init(repositoryName, username, password); RepositoryDirectoryInterface directory = repository.loadRepositoryDirectoryTree().findDirectory("/my/directory"); Variables variables = new Variables(); variables.setParameters(parameters); TransMeta transMeta = repository.loadTransformation(transformationName, directory, variables, null); Trans trans = new Trans(transMeta); trans.execute(null); String[] encodedParameters = TransParameterCodec.encodeParams(parameters); Map<String, String> paramMap = new HashMap<>(); for (String encodedParameter : encodedParameters) { String[] split = encodedParameter.split("="); paramMap.put(split[0], split[1]); } JobMeta jobMeta = repository.loadJob(jobName, directory, variables, null); Job job = new Job(repository, jobMeta, variables); job.setVariables(variables); job.setParams(paramMap); job.start(); job.waitUntilFinished(); } } ``` 在上面的示例代码,我们首先初始化Kettle的环境,然后指定仓库名称、用户名、密码、Job名称和Transformation名称。接下来,我们将要传递的参存储在一个字符串,并将它们传递给Transformation和Job。在传递参时,我们需要使用变量来存储它们。 最后,我们使用Kettle的API来加载Transformation和Job,并将参数传递给它们。注意,我们需要使用TransParameterCodec来编码和解码参。 这就是如何使用Java调用Kettle Job并传递参的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值