是否可以使用JNA / JNI访问本机COM / DirectX API方法?

问题描述 投票:1回答:1

我正在尝试使用JNA调用此本机Windows方法:

HRESULT WINAPI DirectSoundCreate(LPGUID lpGuid, LPDIRECTSOUND* ppDS, LPUNKNOWN pUnkOuter );

但是我真的很难理解应该在Java方面将什么用作参数。使用JNA,您应该创建与本机C结构匹配的Java类,并且我已经成功地使用WinAPI的其他部分来完成了此工作。

根据我到目前为止(我认为)的理解,LPDIRECTSOUND是“指向DirectSound结构的长指针”的typedef,而LPUNKNOWN是“指向未知的长指针”的typedef?

我在DSound.h中找到了本机结构IDirectSound和IUnknown。我应该使用这些吗?但是,我找不到关于这些结构包含的规范,因此,当我尝试将它们镜像为在Java端扩展Structure的空类时,会得到

IllegalArgumentException:结构类se.abjorklund.win32.jna.dsound.IDirectSound的大小未知或为零(确保所有字段都是公共的)

因此,这显然行不通。我猜想我在这里缺少一些基本知识,也许它与我不理解的COM / Direct API有关,并且只要我能得到指针,“去读”之类的答案就很酷。阅读什么!

下面是我要使用JNA移植到Java的C程序的工作片段。

LPDIRECTSOUND directSound; if (directSoundCreate && SUCCEEDED(directSoundCreate(0, &directSound, 0)))

因此,在C语言中,您只需将指针传递给LPDIRECTSOUND。我想我需要制作一个LPDIRECTSOUND类来扩展Java中的JNA Structure类吗?我在这里接近答案了吗?

我正在尝试使用JNA调用此本机Windows方法:HRESULT WINAPI DirectSoundCreate(LPGUID lpGuid,LPDIRECTSOUND * ppDS,LPUNKNOWN pUnkOuter);但是我真的很难理解...

java winapi directx jna
1个回答
0
投票

[JNA确实支持COM,com.sun.jna.platform.win32.COM包中已经存在一些映射,包括com.sun.jna.platform.win32.COM接口和实现它的相应IUnknown类。

© www.soinside.com 2019 - 2024. All rights reserved.