JET_USERDEFINEDDEFAULT 结构

适用于: Windows |Windows Server

JET_USERDEFINEDDEFAULT 结构

JET_USERDEFINEDDEFAULT 结构与JET_bitColumnUserDefinedDefault一起指定,为新列提供使用回调确定的默认值。 此方法可用于实现计算列。

Windowsxp: Windows XP 中引入了 JET_USERDEFINEDDEFAULT 结构。

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

成员

szCallback

以“module!function”格式实现回调的函数的导出名称。

回调作为列架构的一部分保留。 函数的实际主机可执行文件和导出名称必须保留,才能在运行时查找函数的真实地址。

模块名称是包含 函数的主机二进制文件的名称。 函数名称是该函数的导出名称。 数据库引擎将在运行时使用这两条信息来查找回调的真实地址,方法是对模块名称执行 LoadLibrary 调用,然后对函数名称执行 GetProcAddress 调用。

例如,如果在名为 MyCallback.DLL 的 DLL 中实现回调,并且该 DLL 存储在 C:\MyApplication 中,并且实现回调的函数作为 UserDefinedDefaultCallback 从 DLL 导出,则所需的字符串将是“C:\MyApplication\MyCallback.DLL!UserDefinedDefaultCallback”。

注意 不支持在回调名称的模块部分中嵌入“!” 字符。

强烈建议使用不是主机体系结构函数的回调名称。 例如,请勿使用修饰为 stdcall (UserDefinedDefaultCallback@32) 的导出,因为此调用约定仅在 x86 计算机上受支持。 如果使用此类回调,则只能在 x86 计算机上使用数据库。 在这种情况下,应使用别名进行与平台无关的导出。

强烈建议使用实现回调的模块名称的完整路径。 如果使用相对路径,则托管数据库的进程可能容易受到恶意二进制文件的攻击。

应用程序应仅将受信任的回调传递给数据库引擎。 创建关联的列时,数据库引擎将加载二进制文件以验证其是否存在。 如果二进制文件的路径未验证或已知受信任,则它可能会攻击托管数据库的进程。

pbUserData

调用时要传递给回调的用户定义数据的独立块。提供的数据块将作为列架构的一部分保留。 因此,数据块必须完全独立,并且不能引用数据库范围之外的任何数据。

如果 pbUserData 为零,则忽略 cbUserData 的值。 在这种情况下,调用时不会将用户定义的数据传递到回调。

cbUserData

请参阅 pbUserData

szDependantColumns

保留供将来使用。

应始终将此成员设置为 NULL。

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 Professional。

服务器

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Unicode

作为 JET_ USERDEFINEDDEFAULT_W (Unicode) 和 JET_ USERDEFINEDDEFAULT_A (ANSI) 实现。

另请参阅

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF