- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码可以与使用 C++ 的 Windows 上的硬件设备通信。代码做了一些非常简单的事情来对设备上的按钮按下使用react,我将它编译成一个 dll,并带有一个观察器,当按下按钮时调用该观察器。我现在需要将它与一个大型 Java 程序连接起来。
我打算使用 JNA,但它只适用于 C,我看不出如何使用 C 中的观察者模式来做到这一点。我已经研究过使用 BridJ 和 SWIG(两者都适用于 C++ DLL)为已编译的 dll(带有关联的头文件)创建一个接口(interface),但 BridJ 创建了大量文件(在 JNAeratorStudio 中),然后因错误而停止,我看不到如何使用 SWIG 在 Windows 上开始(我正在使用 Visual Studio Express 而不是完整的 Visual Studio)。
有没有人知道有关将 C++ DLL 与 Java 程序集成的教程 - SWIG 看起来很有前途,但教程很“乏味”。
我放了一些简单的 C 代码来与下面的 DLL 对话:
#include <iostream>
#include <stdio.h>
#include "DeepFocusControlDll.h"
using namespace std;
using namespace DeepFocusControl;
class MyObserver : public DeepFocusControl::DeepFocusObserver{
void Event(){
printf("***Button Pushed***");
}
};
int main()
{
DeepFocusControl::AVA6Control* dfc = new DeepFocusControl::AVA6Control();
MyObserver* observer = new MyObserver();
dfc->AddObserver(observer);
bool connected = dfc->IsConnected();
printf("Connected %s\n", (connected)?"true":"false");
bool connectresult = dfc->Connect();
printf("Connecting %s\n", (connectresult)?"true":"false");
connected = dfc->IsConnected();
printf("Connected %s\n", (connected)?"true":"false");
dfc->SetHardwareAppLaunch(false);
char waitChar;
cin >> waitChar;
dfc->SetHardwareAppLaunch(true);
dfc->RemoveObserver(observer);
dfc->Disconnect();
printf("Disconnected\n");
cin >> waitChar;
}
如果有人知道在这上面使用观察者模式的更简单方法,我也可以很高兴地重新编写 C 端代码。
最佳答案
听起来您正在寻找 SWIG 的 directors feature .在最简单的形式中,您可以通过提供如下接口(interface)文件来将 Controller 与 SWIG 结合使用:
%module(directors=1) MyModule
%feature("director");
%{
#include "mydll.h"
%}
%include "mydll.h"
给定一个头文件“mydll.h”:
class Observer {
public:
virtual void frobination() = 0;
virtual ~Observer() {}
};
inline void bar(Observer *o) {
o->frobination();
}
然后你可以运行 SWIG:
swig -Wall -java -c++ mymodule.i
This will generate three Java classes: MyModule
, MyModuleJNI
and Observer
. Of these MyModule
will contain all the free functions from your header file, exposed as static
member functions since Java has no such thing as free functions. You can safely ignore MyModuleJNI
- it's glue generated by SWIG for connecting MyModule
to the real C++ implementations. You'll need to compile mymodule_wrap.cxx for MyModuleJNI
(and hence MyModule
) to work correctly though and load the DLL using System.loadLibrary
before you call any functions from them.
The Observer
class directly corresponds to the Observer interface in mydll.h
. You should derive from it in Java and override the frobinate
function to give it your own implementation:
public class Test extends Observer {
@Override
public void frobination() {
System.out.println("go go gadget frobinator");
}
public static void main(String[] argv) {
System.loadLibrary("mymodule");
Test t = new Test();
MyModule.bar(t);
}
}
我可以编译并运行它来完全按照您的希望去做。
如果您愿意,可以通过添加以下内容自动调用 System.loadLibrary
:
%pragma(java) jniclasscode=%{
static {
try {
System.loadLibrary("mymodule");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. \n" + e);
System.exit(1);
}
}
%}
到您的 SWIG 接口(interface)文件。
如果您的真实头文件如此简单,那么获得相同结果也应该如此简单。如果它更复杂,您可以指示 SWIG 以各种方式对它的某些包装进行特殊处理。
关于java - 将 DLL 包装成 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143460/
我正在尝试读取和处理一个大的 json 文件(~16G),但即使我通过指定 chunksize=500 读取小块,它仍然有内存错误。我的代码: i=0 header = True for chunk
请看下图... 我想通过 CSS 实现。 我现在将此分隔符用作在我的容器内响应的图像 ( jpg )。问题是我似乎无法准确匹配颜色或使白色晶莹剔透。 我认为 CSS 是解决这个问题的最佳方式。 尺寸为
所以我正在尝试使用 AngularJS 和 Node.js。我正在尝试设置客户端路由,但遇到一些问题。 编辑 所以我改变了一些代码如下 https://github.com/scotch-io/sta
我想创建如下图所示的边框: 这段代码是我写的 Some Text p{ -webkit-transform: perspective(158px) rotateX(338deg); -webk
好的,所以我有一个包含 2 个选项的选择表 $builder->add('type', 'choice', array( 'label' => 'User type', 'choice
我的代码: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { ngr.
我正在尝试编写 Tic-Tac-Toe 游戏代码,但不知道如何在轮到我时push_back '+' 字符。 因此,每当玩家输入例如“Oben 链接”时,这基本上意味着左上角,我希望游戏检查输入是否正确
我正在研究 HtmlHelper.AnonymousObjectToHtmlAttributes。 它适用于匿名对象: var test = new {@class = "aaa", placehol
在 stackoverflow 上所有这些 mod 重写主题之后,我仍然没有找到我的问题的答案。我有一个顶级站点,基本上我想做的就是将 /index.php?method=in&cat=Half+Li
仅使用 CSS 可以实现此功能区吗? 最佳答案 .box { width: 300px; height: 300px; background-color: #a0a0a0;
我有一个 jbuilder 模板,它用 json 表示我的一个模型,如下所示: json.(model, :id, :field1, :field2, :url) 如果我只是从控制台访问该字段,则 u
昨天我问了一个问题 - Draw arrow according to path 在那个问题中,我解释说我想在 onTouchEvent 的方向上绘制一个箭头。我在评论中得到了答案,说我应该旋转 Ca
我希望段落中的代码与代码块中显示的代码一致。 例如: The formula method for a linear model is lm(y~x, data = dat). For our da
我使用 ViewPager 获得了一个选项卡菜单。每个选项卡都包含来自 android.support.v4 包的 fragment (与旧 SDK 的兼容性)。其中一个 fragment 是 Web
我正在从事一项需要多种程序能力的科学项目。在四处寻找可用的工具后,我决定使用 Boost 库,它为我提供了 C++ 标准库不提供的所需功能,例如日期/时间管理等。 我的项目是一组命令行,用于处理来自旧
外媒 Windows Latest 报道,随着 Windows 10 的不断发展,某些功能会随着新功能的更新而被抛弃或成为可选项。早在 2018 年,微软就确认截图工具将消失,现代的 “截图和草图”
我有标记的 Angular ,我只希望标记旋转到那个 Angular 。 marker = new google.maps.Marker({ position: myL
我一定是遗漏了什么,但我不知道是什么。我有使用 polymer 实现的简单自定义元素: TECK ..
我有一个关于如何设置我们产品的分步教程。我必须在每个步骤中显示大量示例代码。以下是我必须在页面中显示的代码类型列表。我用什么来格式化所有内容? Java 代码示例 XML 样本 iOS SDK 文件(
我需要在我的 iPad 应用程序中绘制一些图表,所以我遵循了本教程: http://recycled-parts.blogspot.com/2011/07/setting-up-coreplot-in
我是一名优秀的程序员,十分优秀!