Tag: com

使用WiX安装程序复制Visual Studio COM注册

曾几何时,一位年轻的,天真的工程师认为将自己的应用程序的一些function分离成用C#编写的COM组件是个好主意。 Visual Studio拥有所有的工具,对吧? .NET实际上是为此而做出的,对吧? 哈! 他说,这将是容易的。 我将有组件的体面的分离,使业务逻辑远离前端,并与COM,我将能够在任何地方使用它! 他愉快地在项目属性中检查了register for COM interopcheckbox的register for COM interop ,暴露了他想要的分类,然后继续前进。 哦,这样的select做出的审判。 现在这位年轻的工程师,更有经验的人现在不会希望这样的人了。 然而,他肩上的负担却是沉重的, 他希望减轻负荷。 WiX是一个用于从XML生成Windows Installer文件的工具。 这吸引了他 – 它可以很简单地复制一些正确的Windows安装程序文件所需的大部分代码,只需从less量configuration文件中复制即可。 他的目光正在抬头。 使用WiX 2.0,他可以轻松生成注册C#COM对象所需的文件。 这涉及到使用工具tallow。 他会做如下的事情: tallow -c -nologo MyComExposedLibrary.dll > MyComExposedLibrary.wxs (最初这是手动完成的,但最终我将这些步骤logging到一个小工具中,设置最终目录ref ID,组件ID,文件ID,GUID和代码库)。 然后,随后的安装程序将安装,如果应用程序工作,将会有欢乐的庆祝。 它没有。 这位年轻的工程师多年来一直在研发PC和testing安装PC的差异。 “所有registry项都是一样的!” 他会惊呼。 “MyComExposedLibrary的一切都注册了,我发誓! 除此之外,事实并非如此。 在第三天的黎明之后,他意识到还有另一个Visual Studio注册的对象,他的安装程序不是:MyComExposedLibrary.tlb文件。 显然,Visual Studio一直在注册这个文件,在HKLM\Software\Classes\Interfaceregistry项中创build其他子项,并在HKLM\SOFTWARE\Classes\TypeLib注册typelib。 Tallow没有任何帮助,抱怨说.tlb不是一个文件夹。 也不是WiX 3.0testing版 – 这似乎有更多的问题让事情工作。 我也给了热火一个尝试。 这生成了registry元素和类元素。 […]

COM和OLE有什么区别?

COM和OLE有什么区别?

COM(C ++)编程教程?

有没有什么好的网站从头开始学习C ++ / COM? 我正在寻找类似速成课程的内容,可能有两周的内容。 课程可以承担标准C / C ++的知识,或者至less不是一个完整的假人。

在DCOM调用中使用默认身份validation和单独的隐藏/模拟

我试图用DCOM实现两件事情(Out of process) 使用CoInitializeSecurity及其参数pAuthList设置进程范围的身份validation。 在特殊情况下使用隐形来改变呼叫者的身份(COM呼叫) 我的想法: AFAIK身份validation信息结构包含所有新的COM调用的默认身份validation信息(如RPC_C_AUTHN_WINNT的用户名和密码)。 所以,代替进程标记,auth结构中的信息应该被COM使用。 但是,所有COM调用/连接始终使用进程的身份而不是应用的默认进程。 通常,可以使用CoSetProxyBlanket来更改代理的身份validation信息。 这对我有用。 我的问题是,如果我自己模拟令牌并调用COM函数,它是否必须工作。 我读过各种MSDN文章,应用EOAC_DYNAMIC_CLOAKING到CoInitializeSecurity应该使其工作。 但是,我手动“模拟的COM调用总是显示服务器端的进程标识。 客户端看起来像这样(Delphi) var authList : SOLE_AUTHENTICATION_LIST; authidentity : SEC_WINNT_AUTH_IDENTITY_W; authInfo : array[0..1] of SOLE_AUTHENTICATION_INFO; pcAuthSvc : DWORD; asAuthSvc : array[0..0] of SOLE_AUTHENTICATION_SERVICE; Token : TJwSecurityToken; begin ZeroMemory( @authidentity, sizeof(authidentity) ); authidentity.User := 'Testbenutzer'; authidentity.UserLength := Length('Testbenutzer'); authidentity.Domain := ''; authidentity.DomainLength := 0; […]

什么是COM(组件对象模型)简而言之?

看来COM对象是由OSpipe理的通用对象。 对象遵循一个严格的界面,允许你查询对象来确定信息。 这是什么COM对象?

我应该使用哪个版本的MSXML?

似乎这将是一个常见的问题,虽然我无法find它。 应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我应该如何决定? 有MSXML3,4,5和6。 我最近在使用MSXML v4的调用-wcf-service-by-vbscript中发布了一些代码。 AnthonyWJones发布说,我不应该使用4,而是3或6,但可能是3.当然不是v5! 为什么? 我想知道更多关于select要在我的应用程序中使用的MSXML版本的条件。 奖金问题 :有没有人有不同版本的MSXML之间的差异总结? 总结到目前为止: MSXML6 应该是第一select。 于2006年发布,包括性能和合规性修复。 如果可以的话,使用这个。 这很好。 没有合并模块; 要将MSXML6运行时与您的应用程序捆绑在一起, MSbuild议打包MSXML6 msi文件 。 MSXML6是MSXML3 / 4的升级版本,但不能替代它们,因为它会停用某些function。 你可以在这里得到MSI。 MSXML3 第二select。 最广泛部署的版本。 最初在2000年3月发货。积极维护,没有新的function。 目前支持,如果你在SP5 (2005年出货)或更高版本。 目前SP7也是从2005年开始的。 MSXML5 仅作为MS-Office的一部分发布。 目前由Microsoft支持,但仅作为Office的一部分,而不是用于构build应用程序。 不要构build依赖于MSXML5的应用程序:Verboten。 MSXML4 最初发货? 目前处于“维护模式”。 微软鼓励人们将MSXML4移到MSXML6。 目前支持,如果您在MSXML4SP2或更高版本,2003年出货。下载MSXML4SP2 在这里 。 可以重新分配 。 在Internet Explorer中使用正确版本的MSXML是微软xmlteam的博客上的一个不错的入口。

什么注册一个DLL呢?

我知道如何注册dll,但我从来不确定为什么要这样做,或者在什么情况下必须注册dll。 有人可以解释或指向我的一些文件?

使用Haskell进行Excel自动化会导致段错误

我可以用下面的脚本启动Excel。 但是在ghci(7.4.1)中,我运行它时出现了分段错误。 我不知道现在从哪里search。 我没有这个错误,如果我删除线 workSheets <- workBook # propertyGet_0 "Worksheets" 这是代码。 可能是我忘了一些东西。 我在这里阅读了com.hs的源代码,但是并没有给我任何线索。 import System.Win32.Com import System.Win32.Com.Automation — — createObjectExcel — coming from Automation.hs and com.hs — iidIDispatch_unsafe = mkIID "{00020400-0000-0000-C000-000000000046}" createObjExl :: IO (IDispatch ()) createObjExl = do clsidExcel <- clsidFromProgID "Excel.Application" pExl <- coCreateInstance clsidExcel Nothing LocalProcess iidIDispatch_unsafe return pExl fichierTest2 = "E:/Programmation/haskell/Com/qos1.xls" […]

在另一个分区中的COM +对象激活

我创build了一个COM +域分区,然后将其映射到Windows 2008服务器计算机,并将COM +应用程序导入到它。 我尝试使用以下C#代码远程激活服务器上特定分区的对象: //partition guid Guid guidMyPartition = new Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70"); //parition moniker string uri= "partition:{" + guidMyPartition + "}/new:MyObject"; Type t = Type.GetTypeFromProgID("MyObject", "MyServer"); MyObject obj = (MyObject)Activator.GetObject(t, uri); 但我得到这个例外: 无法创build通道接收器来连接到URL'分区:{41e90f3e-56c1-4633-81c3-6e8bac8bdd70} / new:MyObject'。 一个合适的频道可能没有被注册。 有谁知道如何能够完成这样的激活?

BSTR到std :: string(std :: wstring),反之亦然

在C ++中使用COM时,string通常是BSTR数据types。 有人可以使用像CComBSTR或MS的CString BSTR包装。 但是因为我不能在MinGW编译器中使用ATL或MFC,有没有标准的代码片段将BSTR转换为std::string (或std::wstring ),反之亦然? 还有一些类似于CComBSTR BSTR非MS封装? 更新 感谢所有以任何方式帮助我的人! 只是因为没有人解决BSTR和std::string之间的转换问题,我想在这里提供一些关于如何做到这一点的线索。 下面是我用来将BSTR分别转换为std::string和std::string到BSTR的函数: std::string ConvertBSTRToMBS(BSTR bstr) { int wslen = ::SysStringLen(bstr); return ConvertWCSToMBS((wchar_t*)bstr, wslen); } std::string ConvertWCSToMBS(const wchar_t* pstr, long wslen) { int len = ::WideCharToMultiByte(CP_ACP, 0, pstr, wslen, NULL, 0, NULL, NULL); std::string dblstr(len, '\0'); len = ::WideCharToMultiByte(CP_ACP, 0 /* no flags */, pstr, […]