更改您的代码以使用后期绑定:
Public Function LicenseTBarCode()
On Error GoTo Err_LicenceTBarCode
Dim TB
Set TB = CreateObject("TBarCode10.TBarCode10")
TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D
Set TB = Nothing
Exit Function
Err_LicenceTBarCode:
MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error
DoCmd.Quit
End Function
为了使其正常工作,您确实需要对所有 TBarCode 代码使用后期绑定,包括您可能正在使用的任何其他 TBarCode 对象。如果您还不熟悉后期绑定,一开始理解起来可能会有些困难,尤其是在您使用任何使用工厂模式的类时。
使用后期绑定,您将取消选中对 DLL 的引用,然后您的代码需要编译而不会出现错误。使用后期绑定进行开发可能具有挑战性,因为您将无法访问 IntelliSense。最好使用 Early Binding 进行开发,然后稍后将您的代码转换为 Late Binding。
后期绑定丢失的另一件事是在原始对象中定义的任何常量。您必须自己创建这些。根据您需要使用的数量以及您需要在哪里使用它们,创建一个模块来保存这些常量可能是最简单的。你真的只需要在你的代码中实际使用的常量。
Global Const eLicKindSingle = 1 'Single license for exactly one computer
Global Const eLicKindSite = 2 'Site license for an arbitrary number of computers within one site (or one facility) at one legal address
Global Const eLicKindDeveloper = 3 'Developer license for redistribution to 3rd party
Global Const eLicKindWeb = 3 'Web-server license
Global Const eLicProd1D = 32 '(1D codes)
Global Const eLicProd2D = 33 '(2D codes)
或者,您可以只使用常量包含的值。例如:
TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32
此外,据我所知,后期绑定不适用于 ActiveX 控件。ActiveX 控件本质上是早期绑定的。
还有另一种方法可以处理这个问题。我使用一个“starter”数据库文件来处理主数据库的一些先决条件。此入门数据库不使用任何引用。它只检查文件系统以查看是否安装了正确的文件。如果不是,它会弹出一个带有正确错误/警告的消息框,然后它要么运行主数据库文件,要么选择不运行它,具体取决于您写入其中的逻辑。这是避免使用后期绑定的一种方法。