in ffi/structs/structs.dart [52:99]
void main() {
// Open the dynamic library
var libraryPath =
path.join(Directory.current.path, 'structs_library', 'libstructs.so');
if (Platform.isMacOS) {
libraryPath = path.join(
Directory.current.path, 'structs_library', 'libstructs.dylib');
}
if (Platform.isWindows) {
libraryPath = path.join(
Directory.current.path, 'structs_library', 'Debug', 'structs.dll');
}
final dylib = DynamicLibrary.open(libraryPath);
final helloWorld =
dylib.lookupFunction<HelloWorld, HelloWorld>('hello_world');
final message = helloWorld().toDartString();
print(message);
final reverse = dylib.lookupFunction<ReverseNative, Reverse>('reverse');
final backwards = 'backwards';
final backwardsUtf8 = backwards.toNativeUtf8();
final reversedMessageUtf8 = reverse(backwardsUtf8, backwards.length);
final reversedMessage = reversedMessageUtf8.toDartString();
calloc.free(backwardsUtf8);
print('$backwards reversed is $reversedMessage');
final freeString =
dylib.lookupFunction<FreeStringNative, FreeString>('free_string');
freeString(reversedMessageUtf8);
final createCoordinate =
dylib.lookupFunction<CreateCoordinateNative, CreateCoordinate>(
'create_coordinate');
final coordinate = createCoordinate(3.5, 4.6);
print(
'Coordinate is lat ${coordinate.latitude}, long ${coordinate.longitude}');
final myHomeUtf8 = 'My Home'.toNativeUtf8();
final createPlace =
dylib.lookupFunction<CreatePlaceNative, CreatePlace>('create_place');
final place = createPlace(myHomeUtf8, 42.0, 24.0);
calloc.free(myHomeUtf8);
final name = place.name.toDartString();
final coord = place.coordinate;
print(
'The name of my place is $name at ${coord.latitude}, ${coord.longitude}');
}