我正在尝试使用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);但是我真的很难理解...
[JNA确实支持COM,com.sun.jna.platform.win32.COM
包中已经存在一些映射,包括com.sun.jna.platform.win32.COM
接口和实现它的相应IUnknown
类。