草庐IT

c++ - idl 和 odl 的区别

IDL和ODL的主要区别是什么。我有很多项目,有些有idl,有些有odl。我应该在哪里使用它们。什么是权衡。 最佳答案 ODL是一种传统格式。它已被MIDL(又名:IDL)取代。查看这篇Microsoft官方文章:MIDLandODLTheMicrosoftInterfaceDefinitionLanguage(MIDL)nowincludesthecompleteObjectDefinitionLanguage(ODL)syntax.现在,如果您有ODL文件,您可以保持原样,或将它们迁移到IDL中。这将是推荐的解决方案,但它可能容

c# - 如何在 dot net 中使用免注册 COM dll

在我的一个项目中,我有一个使用C++DLL的C#应用程序。目前在客户端PC上,我们正在注册表中的COM组件中注册C++DLLS,以便我们在C#中使用它们。我在NET上了解到,Microsoft提供了一个RegFree解决方案,链接为http://msdn.microsoft.com/en-us/library/ms973913.aspx但是看完之后我并没有得到太多线索,因为我的应用程序架构如下所示不同我有2个C++dll让我们说CPForms.dll和Rules.dll。Rule.dll包含在CPForms.dll中我有1个C#dll假设使用CPForms.DLL的ConsumeFor

c++ - 如何在 E_NOTIMPL 和 E_NOINTERFACE 之间进行选择?

我已经搞不清是应该从我的COM服务器方法返回E_NOTIMPL还是E_NOINTERFACE。我有一个类有两个函数,我从我继承的类中覆盖了这两个函数,这两个函数什么都不做,因为它们目前还没有得到真正的支持,所以我问我应该使用“未实现”还是“否”这些函数返回值的接口(interface)”?有没有人对何时使用它们有一般的经验法则? 最佳答案 如果您未能实现整个接口(interface),那么您的QueryInterface可以显式返回E_NOINTERFACE,这样就没有人会尝试调用它的任何方法,或者您可以直接让所有方法都可以返回E_

c++ - 视频中的多重跟踪

我正在处理小型图像处理任务,我需要跟踪4个红色物体。我知道如何追踪单例。我想知道跟踪多个点的最佳方法是什么。有4个点定位成一个矩形,所以我可以使用形状检测或角点检测来检测和跟踪这些点吗?请参见下图。 最佳答案 这是我在GitHub上的实现:https://github.com/Smorodov/Multitarget-trackeryoutube上的视频:http://www.youtube.com/watch?v=2fW5TmAtAXM&list=UUhlR5ON5Uqhi_3RXRu-pdVw简而言之:检测物体。此步骤提供了一组

.net - COM 互操作 : indexed property signature issues

我正在开发一个项目,该项目是对一个相当大的经典ASP项目的.NET扩展,使用了大量C++COM对象,这些对象一直存在于我们的代码库中。不幸的是,C++端有很多hack-ish代码,我担心我没有足够的经验来解决我遇到的问题。简而言之,我可以实例化有问题的COM对象,VisualStudio告诉我应该能够调用它的“方法”(在引号中,因为它们实际上作为参数化属性公开)。但是,我尝试调用的任何方法都会给我错误“索引属性‘CoreAspLib.IComUser.LoginUser’具有必须提供的非可选参数。”问题是,我使用的参数与经典ASP世界中使用的参数完全相同,甚至属性的IntelliSen

c++ - 我们应该将 COM 中的 BSTR 类型视为值还是引用?

从ATLInternals一书中,我知道BSTR不同于OLECHAR*,BSTR有CComBSTR和CString。根据MSDNAllocatingandReleasingMemoryforaBSTR,我知道调用者/被调用者的内存管理责任。从MSDN中获取这一行,HRESULTCMyWebBrowser::put_StatusText(BSTRbstr)我仍然不知道如何在我的实现中正确处理bstr。因为我仍然有一个关于BSTR的基本问题——我们应该将bstr视为一个值(如int)还是一个引用(如int*),至少在COM接口(interface)边界上。我想在我的实现中尽快将BSTR转换

c# - COM 基本链接

伙计们,你能给我提供学习基本COM的教程链接或.pdf吗?。我用谷歌搜索它..我仍然推荐stackoverflow的答案所以请通过我..谢谢 最佳答案 这是我的一些比较好的书签:Wikipedia-ComponentObjectModelIntroductiontoCOM-WhatItIsandHowtoUseIt.IntroductiontoCOMPartII-BehindtheScenesofaCOMServerFinallyUnderstandingCOMAfterChangingaLightBulbIntroductiont

c++ - COM 初始化和在 Win32 C++ DLL 中的使用

我正在编写一个使用COM查询WMI的Win32C++DLL。如何以编程方式确定COM是否已初始化?谢谢。 最佳答案 MarkRansom是对的直接、干净和简单的解决方案是要求调用者对COM进行初始化。丑陋的骇客您可以尝试第一次调用-可能是CoCreateInstance,如果它返回CO_E_NOTINITIALIZED,请自己运行CoInitialize(在这种情况下不要忘记取消初始化)但是,从DLL将CoInitialize“注入(inject)”到调用者线程中仍然存在问题。所以有一个清洁溶液让DLL创建一个工作线程(这意味着DL

c++ - 如何有效地将 BSTR 复制到 wchar_t[]?

我有一个BSTR对象,我想将其转换为复制到wchar__t对象。棘手的是BSTR对象的长度可能在几千字节到几百千字节之间。是否有一种有效的方式来复制数据?我知道我可以只声明一个wchar_t数组并始终分配它需要保存的最大可能数据。然而,这意味着为可能只需要几千字节的数据分配数百KB的数据。有什么建议吗? 最佳答案 首先,如果您需要做的只是阅读内容,您实际上可能根本不需要做任何事情。BSTR类型已经是指向空终止wchar_t数组的指针。事实上,如果您查看标题,您会发现BSTR本质上定义为:typedefBSTRwchar_t*;因此,

c++ - 成员方法如何删除对象?

我目前正在研究COM,下面的代码让我很困惑。STDMETHODIMP_(ULONG)ComCar::Release(){if(--m_refCount==0)deletethis;//howcouldthis"suicide"deletionbepossible?returnm_refCount;}我想知道如何在其成员方法中删除一个对象实例?所以我做了以下实验:classA{public:voidSuicide(void);voidEcho(void);charname;};voidA::Echo(void){::printf("echo=%c\n",name);}voidA::Sui