以前玩了蛮久的vba,最近关注了一下twinbasic这门语言。今天来尝试一下。虽然目前还有很多不完善的地方,但作者更新很频繁。而且用用还能做点东西出来。

作者是用webview2来开发ide的,说实话,反应不是那么快,但是看起来还是比较炫。首先我们来看一下整个界面:

 整个窗口布局比较现代化。我们可以用来做标准窗体,activex控件,activex dll,标准dll,导入vb6项目,从文件夹导入。可以直接使用注册的com组件。最重要的是,支持64位了。从右侧的win32那个选项框可以看到里面64位的支持设定还有一个安全模式选择。64位的我就不说了,安全模式主要用于修复。我们一般不会选择这个选项。多话不说现在我们来体验一下。

首先我试试标准的窗体exe.新建以后界面如下图,看着是比较现代化,但是我们看到自带的toolbox就比较缺少了。当然我们可以注册vb6时代控件拿来用.不过只有32位的了。如果你需要64位,可能就需要自己去开发设计了。

 

好了,话说回来。我放上了一个按钮,在左侧的窗口类代码块里写几句:

 

 

 点运行按钮可以直接运行,如下图。我们可以看到tb的事件已经不像vb6那样了,而是学习了vb.net的写法,对我来说还是可以接受的。毕竟已经过了那么多年,一门新生代语言还是需要新的语言特性。

 下面我们来试写标准的dll给vba调用。我用的是32位的office,就只需要写32位的dll.如果你是64位的office就需要编译成64位的dll.注意与你的系统是不是64位无关。新建选择标准dll那一选项。加入以下代码,注意需要加入DllExport标记,表明导出函数:

[ DllExport ]
Public Sub helloname(ByVal name As String)
 MsgBox "Hey," & name
End Sub 

看了一下make/build后的dll,只有20kb,蛮小的哈。我们去看一下是否导出了函数。可以看到com组件需要的几个函数都显示出来了,当然也包括我们自己导出的函数。其实这个就是一个导出了函数的com dll.不需要注册我们可以和直接使用com接口的语言直接互动。

 vba里面调用像使用api函数一样调用,但是因为ap的dll是在系统搜索路径里面,所以我们调用不需要带上dll的路径但是我们自己写的dll,天知道会在哪个目录里,所以需要带上具体的路径:

Private Declare Sub helloname Lib "C:\Users\Administrator\Downloads\Build\dlltest.dll" (ByVal Name As String)

Sub test()
helloname "fanxiaolei"
End Sub

显示结果乱码。我们去看一下settings文件:

 

 

 之前一直在想怎么没有控制台的选项。然后在工程的setings文件里面看到可以设置的,默认窗体是不生成控制台的。选项改为yes就可以玩控制台了。

 

 在里面看到compiler使用unicode的api函数的一个默认选项,应该是使用unicode编码,那么我在dll里通过strconv来转换接受的ansi字符串就可以了。修改一下dll代码然后重新生成:

 [ DllExport ]
    Public Sub helloname(ByVal name As String)
        MsgBox "Hey," & StrConv(name, vbUnicode)
    End Sub

生成的dll变成了23kb,真的是一个函数多了3KB.运行一切ok.

 

还有com调用的后期绑定函数createobject.当然了前期勾选引用有提示而且运行效率更高。 上面只是简单的试水一下有兴趣的vba/vb爱好者可以自行研究。补充一下:最近去官网看了下,twinbasic是默认使用Unicode编码的。32位可以免费使用。64位的免费版写的东东启动时会有5秒显示它那个图标的问题。要解锁就需要成为付费用户。