小编cky*_*880的帖子

是否可以使用JNI在C或C++中实现Java接口?

假设一个包含类的Java库,让我们调用它Foo.该类包含一个构造函数和两个方法:

// constructor
Foo();

// returns a random int
public int bar();

// generates a random int "x" and calls integerGenerated(x)
public void generateInt(IntGeneratorListenerInterface listenerInterface);
Run Code Online (Sandbox Code Playgroud)

这假定Java接口IntGeneratorListenerInterface有一个方法:

void integerGenerated(int generatedInt);
Run Code Online (Sandbox Code Playgroud)

我可以bar()从本机C和C++ 调用.这是一个C++示例,假设已正确初始化JNIEnv env:

// instantiate Foo
jclass fooClass = env->FindClass("com/my/package/Foo");
jmethodID constructorMethodID = env->GetMethodID(fooClass, "<init>", "()V");
jobject fooInstance = env->NewObject(fooClass, constructorMethodID);

// call bar()
jmethodID barMethodID = env->GetMethodID(fooClass, "bar", "()I");
jint result = env->CallIntMethod(fooInstance, barMethodID);
printf("%d", result);
Run Code Online (Sandbox Code Playgroud)

我想要做的是IntGeneratorInterface从C/C++ 实现接口,这样当我generateInt()使用类似的JNI调用调用时,我可以在C中接收回调,如: …

c c++ java-native-interface

7
推荐指数
1
解决办法
1653
查看次数

是否可以在用户的​​主目录中为VBA中的共享库指定一个位置(在Office for Mac中)?

我目前正在使用类似于以下内容的VBA代码来指定共享库的位置,以用于从Office应用程序到桌面应用程序的通信(传递字符串).VBA代码/宏需要存在于加载项(.ppa)中.

Private Declare Sub sharedLibPassString CDecl Lib "/Users/myUserName/Library/Application Support/myCompanyName/MySharedLib.dylib" Alias "PassString" (ByVal aString As String)
Run Code Online (Sandbox Code Playgroud)

在VBA宏代码中,我可以执行以下操作.

Call sharedLibPassString(myString)
Run Code Online (Sandbox Code Playgroud)

我有通信工作,但我想/Users/myUserName/用当前用户的主目录替换该部分.通常在Mac上,您指定~/Library/Application Support/...,但~/语法不起作用,产生"文件未找到"运行时错误.

我发现使用以下环境变量方法可以获得我~/需要的位置:

Environ("HOME")
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到制作CDecl Lib声明这一部分的方法,因为据我所知,它Environ是在运行时进行评估的.

有没有办法~/在VBA 中的用户主目录()中指定共享库的位置?


以下是关于我的环境/方法的一些注意事项:

  • 我正在使用Mac,但我相信如果有解决方案,它在PC上也会类似.
  • 我不认为这不重要,但我使用的Office应用程序是PowerPoint(2011).
  • 我试图访问Application Support目录中的某个区域而不是共享库的默认位置的原因是因为我希望桌面应用程序将共享库放在没有安装程序的位置,并且不需要用户或管理员的权限.如果有更好的解决方案或位置来完成相同的任务,这也将非常有用.

vba ms-office

6
推荐指数
1
解决办法
1341
查看次数

标签 统计

c ×1

c++ ×1

java-native-interface ×1

ms-office ×1

vba ×1