У меня есть документация для DLL, которую я должен использовать, где определяется структура, которая является аргументом для одного из собственных методов.
Это выглядит здесь:
typedef struct
{
UNUM32 uiModuleState;
UNUM32 uiSerialNumber;
UNUM32 uiVCIIf;
UNUM32 uiModuleType;
CHAR8 szModuleName[256];
}
VTX_RT_VCI_ITEM;
typedef struct
{
UNUM32 uiNumVCIItems;
VTX_RT_VCI_ITEM * pVCIItems;
}
VTX_RT_VCI_ITEM_LIST;
Calling Convention:
SNUM32 VtxRtGetModuleIds( IO UNUM32* puiBufferLen,
IO VTX_RT_VCI_ITEM_LIST* pVCIItemList);
Я смоделировал эту структуру в JNA, как здесь
VTX_RT_VCI_ITEM
@Structure.FieldOrder({ "uiModuleState",
"uiSerialNumber",
"uiVCIIf",
"uiModuleType",
"szModuleName" })
public class VtxRtVciItem extends Structure
{
public int uiModuleState;
public int uiSerialNumber;
public int uiVCIIf;
public int uiModuleType;
public char[] szModuleName = new char[VciRuntimeAPI.VTX_RT_SMALL_BUF_SIZE];
public static class ByReference extends VtxRtVciItem implements Structure.ByReference {}
public static class ByValue extends VtxRtVciItem implements Structure.ByValue {}
public VtxRtVciItem()
{
super();
read();
}
}
VTX_RT_VCI_ITEM_LIST
@Structure.FieldOrder({ "uiNumVCIItems",
"pVCIItems" })
public class VtxRtVciItemList extends Structure
{
public int uiNumVCIItems;
public VtxRtVciItem.ByReference pVCIItems;
public VtxRtVciItemList()
{
super();
}
}
Первый аргумент описывается следующим образом
puiBufferLen
Размер буфера, на который указывает pVCIItemList.
Как установить правильный размер буфера этой структуры?
Я пытался сделать что-то подобное здесь, но размер этой структуры равен 8, что означает, что VtxRtVciItem не вызывается.
VtxRtVciItemList vtxRtVciItemList = new VtxRtVciItemList();
IntByReference puiBufferLen = new IntByReference();
puiBufferLen.setValue(vtxRtVciItemList.size());