访问 C++通过 JAVA 的本机 DLL(带有命名空间)
我有一个 C++ DLL,其中的函数嵌套在命名空间内。
我需要在java中访问这些函数..我不是一个java专家,但我确实知道一些它的基础知识。
我找到了使用 JNI 访问 C++ 本机 DLL 中的方法的基本 java 代码,但我不确定如何访问嵌套在命名空间中的函数。
I have a c++ DLL where the functions are nested within namespaces.
I need to access these functions in java.. i'm not much of a java expert but i do know a little of its basics.
I found basic java codes to access methods in C++ native DLL using JNI but im not sure how to access the functions nested within namespaces.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能需要获取 C++ 函数的损坏名称。您可以在 Unix 上使用 nm 来执行此操作,或者在 Windows 上使用 dumpbin /exports 来执行此操作。重整后的名称将具有命名空间和函数名称,因此应该很容易找到(除非有多个重载具有相同的名称,您需要区分)。您确定这些函数是普通的 C++ 函数而不是类方法吗?
You will probably need to get the mangled names of the C++ functions. You can use
nm
to do that on Unix ordumpbin /exports
on Windows. The mangled name will have the namespace and function name, so it should be easy to find (unless there are several overloads with the same name that you need to distinguish). Are you sure the functions are normal C++ functions and not class methods?帮自己一个忙:使用 BridJ 进行 C++ 互操作,它应该能够处理大多数命名空间问题:-)
(免责声明:我是 BridJ 的作者)
Do yourself a favour : use BridJ for C++ interop, it should be able to deal with most namespace issues :-)
(disclaimer : I'm BridJ's author)
“Jeremiah Willcock”的答案是正确的,无论如何,你总是可以使用“损坏的名称”在类或命名空间内访问 DLL 函数,这是一种奇怪、肮脏的做事方式,但是,它的工作原理,即使有其他方法方式。
您可以做一些测试,访问这些功能,然后制作您自己的包装器。
"Jeremiah Willcock" answer is right, in any case, you can always access a D.L.L. functions, inside classes or namespaces using "mangled names", its the weird, dirty way of doing things, but, its works, even if there are other ways.
You could do some tests, accesign those functions, and later, make your own wrapper.