// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // // SharedObjects=ffi_test_functions import 'dart:ffi'; import 'package:expect/expect.dart'; import 'dylib_utils.dart'; void main() { doDynamicLinking(); testHandle(); } void doDynamicLinking() { Expect.isTrue(NativeApi.majorVersion == 2); Expect.isTrue(NativeApi.minorVersion >= 0); final initializeApi = testLibrary.lookupFunction< IntPtr Function(Pointer), int Function(Pointer)>("InitDartApiDL"); Expect.isTrue(initializeApi(NativeApi.initializeApiDLData) == 0); } void testHandle() { final s = SomeClass(123); print("passObjectToC($s)"); final result = passObjectToC(s); print("result = $result"); Expect.isTrue(identical(s, result)); } class SomeClass { // We use this getter in the native api, don't tree shake it. @pragma("vm:entry-point") final int a; SomeClass(this.a); } final testLibrary = dlopenPlatformSpecific("ffi_test_functions"); final passObjectToC = testLibrary.lookupFunction("PassObjectToCUseDynamicLinking");