在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天,查看文档时发现Dart运行在服务端下可以调用本地实现(C/C++ dll)。 我想应该有大用处 拿出来分享! 一 先做Dart库 //sse.dart library sample_synchronous_extension; import 'dart-ext:sample_extension'; // The simplest way to call native code: top-level functions. 二. 本地实现的C动态链接库 // sample_extension.c #define DART_SHARED_LIB /*#include <string.h> #include "C:\\tools\\dart-sdk\\include\\dart_native_api.h" //#include <stdbool.h> #pragma comment(lib, "C:\\tools\\dart-sdk\\bin\\dart.lib") // Forward declaration of ResolveName function. // The name of the initialization function is the extension name followed Dart_Handle result_code = Dart_SetNativeResolver(parent_library, ResolveName, NULL); return Dart_Null(); Dart_Handle HandleError(Dart_Handle handle) { // Native functions get their arguments in a Dart_NativeArguments structure void SystemSrand(Dart_NativeArguments arguments) { Dart_NativeFunction ResolveName(Dart_Handle name, int argc, bool* auto_setup_scope) { if (strcmp("SystemRand", cname) == 0) result = SystemRand; //生成库 cl -c sample_extension.c link -dll sample_extension.obj 生成sample_extension.dll动态链接库 三 测试Dart库 //test.dart import 'sse.dart'; void main() { 我们试试效果吧: C:\Dart-pro\c-dll>dart test.dart Finally: 我抱着也许客户端(browser)也能用的心态,勇敢的去试了一下(尝试转成javascript),遗憾的是:报native关键字错误,即,不可以在客户端用,只能在服务器的命令行模式下用哦! Google的经验告诉我们,大公司的设计都是走正经套路的,所以,他们总是不能跟随你的节拍,因为你的节拍太定向化 研究过程中,我觉得以技术角度似乎不应该不能在客户端使用,但是从web标准看,还真不该在browser中实现。 哈哈,你们自己去应用吧,我想没人会那Dart做服务器吧! 哎,从Google全心支持WebAssembly来看,估计,以后还是得走这条路,不过是,由厂商为我们实现想用的C/C++库而已。 |
请发表评论