Skip to content

项目类型

twinBASIC 除了传统的 EXE 和 ActiveX DLL/控件外,还为几种项目类型提供内置支持。

标准 DLL

虽然以前可能通过技巧实现这一点,但 tB 将其作为内置项目类型提供。您可以在启动时选择此项目类型,然后只需在您希望导出函数时用[DllExport]标记它们。名称将按原样使用,不会被混淆。CDecl调用约定支持正常语法,例如Public Function foo CDecl(bar As Long) As Long

twinBASIC 中的标准 DLL 仍然可以指定启动点;然后每个导出将检查此代码是否已运行,如果没有,则运行它。

控制台应用程序

此项目类型允许制作真正的控制台项目,而不是 GUI 项目。有帮助的是,它还将添加默认的Console类用于读取/写入控制台 IO 和提供调试控制台。

Windows 服务

tB 有一个服务包(WinServicesLib),使创建功能齐全的真正服务变得轻而易举。它简化了 MESSAGETABLE 资源的使用、每个 exe 多个服务、用于 IPC 的命名管道等。请参阅示例 21-22。

内核模式驱动程序

内核模式驱动程序只能访问 API 的非常有限的子集,并且不能调用运行时等用户模式 DLL。因此,它通常需要复杂的技巧,并极大地限制您在前 BASIC 产品中可以做的事情(如果可能的话)。当然,内核模式没有 WOW64 层,因此 tB 是第一个支持为 64 位 Windows 制作驱动程序的基本产品。这由"项目:原生子系统"选项以及以下两个功能控制:

覆盖入口点

BASIC 应用程序通常有一个隐藏的入口点,它是第一个运行的,在Sub Main或启动窗体的Form_Load之前。这设置了应用程序的功能,如初始化 COM。twinBASIC 支持覆盖此设置,并将您自己的一个过程设置为真正的入口点。这对于内核模式项目最有用,后者必须有特定类型的入口点,并且不能调用默认设置中的正常 API。但您可能还有其他理由想要使用此选项,但请注意:如果您不自己执行初始化过程或不精确理解您不能使用什么,普通应用程序中的许多东西将被破坏。

将 API 声明放在 IAT 中

tB 有将所有 API 声明放在导入地址表中的选项,而不是像 VBx 那样通过LoadLibrary/GetProcAddress在运行时调用它们(VBx 将 TLB 声明的 API 放在导入表中;tB 也复制了这一点,但进一步为项目内声明提供了选项)。

这在启动时而不是第一次调用时加载和绑定的情况下具有较小的性能优势,但主要用途是用于内核模式,后者不能调用LoadLibrary和其他用户模式 API 来使用后期绑定。

twinBASIC及其LOGO版权为作者"韦恩"所有