Not sure the difference between a Flutter Plugin vs Package, but I'd like to make a Flutter Windows/Desktop application that can access hardware peripherals. The hardware has DLL drivers/library. From what I've seen FFI/JNIGen , Pigeon, or platform-channels must be used, but not sure how to map the DLL's exported functions. For example, many of the functions return pointers to structures that have more pointers/structs and enums as members. For example, one of the header files has a format like: stOne* funcName ( uint32_t val); struct stOne { union { uint8_t ubyte; stTwo ubit; } stThree* pHandle; }; struct stTwo { unsigned bit0 : 1; unsigned bit1 : 1; unsigned bit2 : 1; unsigned bit3 : 1; unsigned bit4 : 1; unsigned bit5 : 1; unsigned bit6 : 1; unsigned bit7 : 1; }; struct stThree { ... }; How can dart call functions from this dll?