草庐IT

com-interop

全部标签

c++ - 选择com的理由

我想知道为什么有人会选择Com作为他的软件开发“技术”我的第一个想法是机器/编程_语言独立你的是什么? 最佳答案 COM是Windows上自动化和IPC的事实标准(尽管.Net已经开始转移焦点),因此有些领域您根本没有(或没有)选择:外壳扩展ActiveX建立在COM上InternetExplorer扩展扩展MSOffice应用程序JScript、VBScript的脚本编写能力,......用一个二进制文件在.Net出现之前,几乎所有MS应用程序的自动化都是通过COM进行的,并且相当多的公司也加入了这列火车。如果您愿意将自己局限于W

c++ - c\c++ 中存储 COM 的 VT_DECIMAL 的正确类型是什么?

我正在尝试为ADO编写一个包装器。DECIMAL是COMVARIANT的一种类型,当VARIANT类型为VT_DECIMAL时。我试图将其放入c原生数据类型中,并保留变量值。似乎正确的类型是longdouble,但我得到“没有合适的转换错误”。例如:_variant_tv;...if(v.vt==VT_DECIMAL){doubled=(double)v;//thisworksbutI'mafraidcanbelossofdata...longdoubleld1=(longdouble)v;//error:morethenoneconversionfromvarianttolongdo

c++ - 当不再有对象引用时,COM 会自动卸载 DLL 吗?

例如,在X语言中:letx=CreateOject("MyProgID")x.LateBoundCall()x.Release()//(orsettingxtoNothinginVB-likelanguage,etc)MyProgID所在的DLL会怎样?COM会自动卸载DLL吗?编辑这是假设上面的代码在一个不暴露任何COM的可执行文件中。 最佳答案 是的,但不是以一种确定性的方式。Windows定期询问每个加载的DLL“isitsafetounloadyounow?”任何响应"is"的DLL均已卸载。注意一个remarkfromMS

c++ - 对于具有线程模型两者的对象,COM 编码是否(永远)是必需的?

这是由anotherquestion触发的.具体来说,我有一个进程中的COM类,它在CLSIDregistry中定义。因为有ThreadingModelofBoth.我们的流程通过CoCreateInstance激活这个对象(不是CoCreateInstanceEx,如果这对进程内dll服务器很重要的话)给定一个Both的线程模型和docs中列出的规则:Threadingmodelofserver|Apartmentserverisrunin------------------------------------------------------Both|Sameapartmenta

c# - 在 C++ 中处理 C# COM 事件

我已经设法创建了一个带有事件的C#COM对象。请在下面找到代码,[Guid("1212674-38748-45434")]publicinterfaceICalculator{intAdd(intNum1,intNum2);}[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)][Guid("3453674234-84444-84784")]publicinterfaceICalculatorEvents{[DispId(1)]voidCompleted(intResult);}[ClassInterface(ClassInterf

【Github】ssh: connect to host github.com port 22: Connection refused

ssh:connecttohostgithub.comport22:Connectionrefused近日在进行push的时候出现以下错误:$gitpushssh:connecttohostgithub.comport22:Connectiontimedoutfatal:Couldnotreadfromremoterepository.Pleasemakesureyouhavethecorrectaccessrightsandtherepositoryexists.解决思路:参考资料:坑:ssh:connecttohostgithub.comport22:Connectionrefused关于

本地Android图书馆模块和com.android.tools.build:3.0.0

我目前正在通过提供的迁移指南迁移我们的项目迁移到新的Gradle插件(3.0.0):https://developer.android.com/studio/preview/features/new-android-plugin-migration.html在我们的Android项目中,我们有一个单个库模块和2个应用模块。库的图书馆模块没有口味,只是调试&释放构建类型,而应用程序具有多种口味和构建类型。我发现的是库模块的构建类型必须匹配应用模块的模块确切地。例如,如果应用模块具有称为debugproguard的buildType,则库模块还必须具有称为debugproguard的bui

c++ - 使用 C++Builder 后期绑定(bind) COM 对象

我们正在从C++Builder2010应用程序连接到某些第3方COM对象。目前我们导入类型库并生成组件包装器,然后能够以相当自然的方式进行方法调用和访问属性。object->myProperty=42;object->doSomething(666);然而,我们已经被COM对象接口(interface)(仍在扩展和开发中)的更改所困扰,导致我们自己的应用程序失败,因为某些方法GUID似乎已失效-即使对接口(interface)的唯一更改已经是添加了一种新方法)。延迟绑定(bind)已被建议作为解决此问题的一种方式。我认为这需要更改我们的代码ratherlikethis:object.O

C++ 可能在 COM 方法边界处抛出代码

C++异常不能跨越COM模块边界。因此,假设我们在COM方法主体中,并且调用了一些C++可能会抛出的方法/函数(这可能会抛出,因为例如使用了STL类):STDMETHODIMPCSomeComServer::DoSomething(){CppDoSomething();//Q1.上面的代码是可行的实现吗?例如,如果该代码是上下文菜单外壳扩展的一部分,如果C++CppDoSomething()函数抛出C++异常,Explorer会做什么?它是否捕获C++异常并卸载shell扩展?它是否只是按照fail-fast方法使Explorer崩溃(从而可以使用故障转储分析问题)?Q2.这样的实现会

c++ - cplusplus.com 说 std::string "shall not be dereferenced"的结尾

如果你能为我澄清一些困惑,我会很高兴。我正在编写一个函数来删除字符串中的重复字符,例如"AB-->"AAABB"。voidremove_dups(std::string&str){std::string::iteratorit=str.begin();while(it!=str.end()){if(*(it+1)==*it){str.erase(it+1);}else{++it;}}}我测试的时候好像能用。但是,我想知道,不应该有栅栏柱问题吗?当“it”是字符串的末尾时,if语句查看不存在的下一个字符。根据cplusplus.com,尾后字符是一个理论字符,将跟在字符串中的最后一个字符