以下技术详细信息能够可靠帮助您实现在 Visual Studio的一个源代码管理插件。
内存管理问题
在大多数情况下,集成 (IDE)开发环境,是调用方,并释放分配内存。 源代码管理插件返回字符串和其他项都调用方分配的缓冲区。 异常在事件发生特定函数的声明注意。
文件名
当一组文件。时,它不作为连续文件的名称。 它将作为数组指向文件的名称。 例如,在 SccGet 函数中,文件名称。 lpFileNames 参数, lpFileNames 实际上是指向 char **。 lpFileNames[0] 是指向名称, lpFileNames[1] 是指向第二个名称,等等。
用模式
所有指针是 32 位,即使在 16 位操作系统。
完全限定路径
如果文件名或目录指定为参数,它们必须是完全限定的路径或 UNC 路径,,而无需关闭杠。 ,如果有基础源代码管理系统要求,是源代码管理插件的职责将这些为相对路径。
对于已注册 DLL 指定完全限定路径
IDE 从相对路径不再加载 DLL (例如,)。 \ NewProvider.dll)。 必须指定 DLL 的完整路径 (例如, C:\Providers\NewProvider.dll)。 此要求通过防止未经授权或模拟的源代码管理 DLL 加载增强 IDE 的安全性。
,当安装您的源代码管理插件时,请检查现有 VSSCI 插件
规划安装您的源代码管理插件的用户可能已在计算机上安装的现有源代码管理插件。 您创建的插件的安装 (设置) 程序应确定是否有相关注册表项中的现有值。 如果这些项已经设置,则安装程序是否应询问用户注册插件为插件默认的数据源控件并替换已安装的脚本。
导致错误代码和报告
SCC_OK 返回源代码管理功能的代码以指示操作为所有文件成功。 如果操作失败,应返回遇到的上一个错误代码。
报告的规则是,如果错误在 IDE 生成, IDE 将其报告负责。 如果错误在源代码管理系统生成,源代码管理插件来报告它负责。 例如, “文件当前未选择”将由 IDE 报告,,而 “此文件已签入”将被插件报告。
上下文结构
在对的 SccInitialize 函数调用期间,调用方通过 ppvContext 参数,该参数是一个未初始化的句柄无效。 源代码管理插件可以忽略此参数也可以分配任何种类的结构和一个指向该结构传递给的指针。 IDE 不了解此结构,但是,它在该插件通过指向此结构到其他调用。 这提供了重要的上下文缓存信息。它可以使用维护全局状态信息在之间保持函数调用,而无需使用全局变量的插件。 该插件来释放在调用机制负责 SccUninitialize 函数。
如果在设置 SCC_CAP_REENTRANT 位的插件 SccInitialize 函数 (具体来说,在 lpSccCaps 参数),多个上下文 framework 用于跟踪已打开的所有项。
Bitflags 和其他命令选项
对于每个命令,例如 SccGet 函数, IDE 会指定更改该命令的行为的选项。
API 由 IDE 支持设置一些选项。 fOptions 参数。 这些选项与它们 特定命令使用的位标志 影响的指令一起进行描述。 通常,这些是用户不会提示的选项。
,因为它们在源代码管理插件中,大不相同大多数用户可配置设置的选项因此未定义。 因此,建议机制是 高级 按钮。 例如,在 get 对话框,则 IDE 将显示其了解仅的信息,但是,它也显示 高级 按钮,如果该插件包含此命令的选项。 当用户单击 高级 按钮时, IDE 调用 SccGetCommandOptions 函数 后源代码管理插件提示用户输入信息,如 bitflags 或一个日期/时间。 该插件返回在 SccGet 命令期间,传入机制的此信息。