Murphy

electron-vue调用 C# dll 闲谈NanUI

电脑版发表于:2020/8/9 0:32

        闲谈!闲谈!闲谈!重要的事情说三遍。
        工作之余偶尔看到NanUI,根据介绍说是在winform中使用html和css,刚好想写一个客户端数据库链接工具,觉得有意思就去了解一下,对我们搞web开发的来说客户端的东西总有莫名的吸引力,毕竟同样的东西web四五千,客户端的话至少1万起步。
        先说作者林选臣,特地去gitee上看了一下,开发者就只有他一个人,感到佩服之余又觉得可悲,这么多的C#开发居然没人参与这个项目...,可惜自己技术不够,提供不了技术支持。
        下班回去大概看了下文档就开搞,首先就是写样式来说,真香,写过丢丢wcf,对客户端都惧怕了,布局等等简直要初学者的命,然后就是后端的各种线程问题,现在想想都头大。页面写完之后就开始了解如何用js去调后台的方法,跟着文档的demo去写,当调通的时候整个人都兴奋了,脑袋闪过各种想法,然后继续撸,后面的过程让我放弃使用NanUI了。
        1、返回时间,根据文档说的大概需要5秒左右接受到后端返回来的数据,UI线程会卡住,也许是我不会用,经过几个晚上的努力也没能解决这个问题。
        2、社区不活跃的问题了,使用NanUI的人很少,遇到问题度娘也没办法。
        3、文档不够详细,很多都是简单的说明,稍微一点业务需求在文档上找不到解决方案。
        4、写法非常复杂繁琐,注册js方法,简单的一个业务要比web开发多出至少两倍的代码。
        5、体积庞大,NanUI是基于cef写的,这是通病,打包后至少一百近两百M的体积。
        5、我在gitee给作者留言,然而却没收到回复,这是压死骆驼的最后一根稻草,果断放弃了。
        条条大路通罗马,我又去了解electron,发现它可以调用C#dll,瞬间又来劲了,因为自己已经习惯写vue了,而且又找到electron-vue,上手就简单多了,作为前端的三大框架之一,不管是发展前景,市场需求,都还是值得一试,看文档,看视频,还是很容易就把一个窗体跑了起来,至于什么主进程,渲染进程这些文档比我说的清楚,我也就不说了。
        期间也是遇到过不少坑,好在解决了,然后就是下载element-ui依赖了,删掉项目里无用的vue页面文件等,配置路由,总算是看到自己写的页面了,这一步解决了剩下的还是问题吗?接下来一路畅通,根据自己css,html基础,一个我想要的页面就有了,布局,色彩搭配基本上我是满意了,放张图欣赏一下

对了这里说一下有个坑,下次大家碰到就很快解决掉,那就是element table,所有element 组件都能正常使用,唯独table不行,引用没问题,写法也没问题,都要抓狂了,讲真的我是搞了有点时间最后度娘帮我解决的

把这个地方改一下就OK了,至于原因忘球了。
    现在完事具备只欠东风了,先去把自己的要的dll写好,复制过来放到static文件里,然后 yarn add electron-edge-js 
安装这个js,下面直接看代码,懒得多说了

//你的页面,我这里是home.vue
const { ipcRenderer: ipc } = require("electron");
var path = require("path");
var edge = require("electron-edge-js");
let testLink = edge.func({
  assemblyFile: path.join(__static, "AutoEntity.Core.dll"),//dll地址
  typeName: "AutoEntity.Core.SqlServerHelper",//dll里的那个类
  methodName: "TestLink",//SqlServerHelper类的TestLink方法
});

//electron-edge规定.net暴露给它的方法必须是Func<object,Task<object>>,返回的类型是obj,我试过返回其他的类型,结果报错,哈哈,搞不懂搞不懂
public async Task<object> Add(object input)
{
     return await Task.Run(() =>
            {
                var link = JsonConvert.DeserializeObject<LinkDto>(input.ToString());
                var conn = new SqlConnection(link.ConnectionString);
                try
                {
                    conn.Open();
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                        conn.Dispose();
                        return new JsonResultFormat(true, "连接成功");
                    }
                    return new JsonResultFormat(false, "连接失败");
                }
                catch (Exception ex)
                {
                    conn.Close();
                    return new JsonResultFormat(false, ex.Message);
                }
            });
}

测试链接成,链接成功,查询库,库下面的表都没问题,然后就是我抓狂的地方,TMD这些都可以,查询库同样的是执行sql,偏偏我写个SELECT * FROM [dbo].[AccountInfo]就是不行,我vs断点调试返回是正常的,dll拿出来让electron调用就不行,然后我又在vs里附加进程,electron调试dll,也是正常的,但是这边接收返回值就是有问题

晚上加班12点回来我有继续查,搞了几个晚上都解决不了,眼看什么都准备好了,偏偏这临门一脚就是不让你踩进去,好气哦。希望各位大哥有知道的评论帮我解决,谢谢。
不说了,我要冷静冷静。

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢