如何在不注册dll的情况下对c++ COM代码进行单元测试?
How can we unit test our c++ COM code without registering the dlls?
我们正在尝试将单元测试添加到我们遗留的c++ COM应用程序中。我们还需要构建机器能够运行单元测试,以确保每个构建都没有引入错误。但是,我们不希望构建机器必须注册com dll,以便一台构建机器可以并行构建多个版本。我们假设,我们可以改变使用注册免费的com与清单文件,但我有一个非常困难的时间让它的工作。还没有用到我们的代码库,只是用到Microsoft提供的基本示例。
我一直在使用这个页面http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8它根本不会工作,当我试图运行未注册的dll使用清单文件时,我得到"类未注册错误"
他们提供的示例工作良好(使用c++ com服务器和c++客户端),但是当我重新构建它们时,它们不工作。
我们使用的是Visual Studio 2013,所以在我看来,registration free . com的工作方式发生了很大的变化,这使得本教程与较新的编译器不兼容。
谁能告诉我使用最新版本的visual studio注册免费网站的资源?为了使我们自己的应用程序更加复杂,当我到达那里时,我们使用VS 2013,但目标是2010编译器,希望这不会造成太大的差异。
如果有更好的方法在com组件上运行c++单元测试而不需要注册,我也想听听这些
谢谢你的帮助。
对于OP来说可能太晚了,但是对于任何遇到这个问题的人来说,这里有Samuel Jack的一篇文章…这可能对未来的读者有帮助,也可能没有帮助……
见http://blog.functionalfun.net/2012/09/a-quick-guide-to-registration-free-com.html
你可以实现你自己的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);
}
除了错误处理之外,您还需要跟踪已经加载的dll。使用每个元素都有一个元组的列表或数组来跟踪这一点。在某些时候,您可能想要卸载全部或部分。
当然,我假设这些是inproc COM服务器。
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么QueryInterface查看两个不同的com项目的同一代码行
- JNI 代码返回字符串,但得到错误 java.lang.UnsatisfiedLinkError: com.packag
- 如何在 JavaScript 代码中调用 COM 方法 (c++)
- 如何从com库中打印到主机,并从.NET代码召唤激活器
- 为使用C# /托管代码的无注册COM Interop设置DLL
- 使用本机/C++代码在VS2010中创建简单COM对象的最简单方法是什么
- 此代码在代码块中完美运行,但在 ideone.com 时出现运行时错误
- 为什么这个C++代码会让 SIGILL ideone.com
- 如何检测 C++/COM 中无法访问的代码
- 通过 .net 互操作类调试到 COM C++代码
- COM 代码库位置 - 如何选择要使用的版本
- 正在将COM对象添加到托管代码中
- 从c#中定义的COM类返回成功代码
- 是否有可能在静态库中编写COM代码,然后将其链接到DLL ?< / h1 >
- 为什么这个COM代码会泄漏
- 当64位非托管代码通过COM调用托管代码时会发生什么
- 如何在不注册dll的情况下对c++ COM代码进行单元测试?
- 我应该如何写正确的COM代码
- 使用COM从c++代码封送c#结构体