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) 实现。 |