To throw an exception into Dart, you need to use the Dart embedding API to throw a new Dart exception.
I would put a try-catch in your C++ code, around the code that might throw, and where the C++ exception is caught, you need to:
1) Create the object you want to throw with Dart_New() or some other constructor that returns a Dart_Handle to an object.
2) Throw that object with Dart_ThrowException().
Good examples of doing this are in runtime/bin/dartutils.cc and the ThrowPRException function in runtime/bin/secure_socket.cc.
OSError in those functions is just a type used by the dartutils library to add additional information about actual OS errors to a Dart exception - you don't need it in the objects
you throw.