Joh*_*n C 7 c++ unit-testing side-by-side visual-studio-2010 registration-free-com
我们正在尝试将单元测试添加到遗留的c ++ COM应用程序中.我们还需要我们的构建机器能够破坏他的单元测试,以确保每个构建都没有引入错误.但是,我们不希望构建机器必须注册com dlls,以便一台构建机器可以并行构建多个版本.我们假设我们可以改为使用注册免费com与清单文件,但我很难让它工作.不是在我们的代码库上,而是在Microsoft提供的基本示例上.
我一直在使用这个页面http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8
,当我尝试使用未注册的dll运行使用清单文件时,它根本不起作用,我得到"类未注册错误"
他们提供的样本工作正常(使用c ++ com服务器和c ++客户端),但是当我重建它们时它们不起作用.
我们正在使用Visual Studio 2013,所以它看起来像注册免费com的工作方式发生了很大的变化,这使得本教程与新的编译器不兼容.
任何人都可以向我指出使用最新版本的visual studio免费注册com的资源吗?当我到达那里时,为了进一步使我们自己的应用程序中的内容复杂化,我们正在使用VS 2013,但是针对2010编译器,希望这不会产生很大的差异.
此外,如果有更好的方法在com组件上运行c ++单元测试而不注册清单文件,我也希望听到这些.
谢谢你的帮助.
您可以实现自己的 CoCreateInstance 版本,该版本采用额外的 DLL 路径参数。代码将是这样的(为简洁起见,省略了错误处理和其他细节):
HRESULT CoCreateInstanceForTest(dllPath, rclsid, riid, ppv)
{
HINSTANCE hinst = LoadLibrary(dllPath); // TODO: Maybe it is already loaded
dllGetClassObject = GetProcAddress(hinst, "DllGetClassObject");
return dllGetClassObject(rclsid, riid, ppv);
}
Run Code Online (Sandbox Code Playgroud)
除了错误处理之外,您还需要跟踪已加载的 DLL。使用列表或数组,其中每个元素都有一个元组来跟踪这一点。在某些时候,您可能想要卸载全部或部分它们。
当然,我假设这些是进程内 COM 服务器。
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |