Articles of com

Linux / UNIX中COM编程的模拟

组件对象模型(COM)是(或者…)在Windows中提供与语言无关的软件组件的方式。 在Linux / UNIX中是否有任何编程模型,具有通过二进制组件重复使用代码的相同原理?

在* nix系统上是否有与COM等价的function? 如果不是,那么nix的可重用性是什么?

我对Windows COM及其背后的想法有所了解。 我想了解* nix系统是否具有相同的function,或者为什么不具备这些function?

Ruby可以导入一个.NET DLL吗?

我有兴趣在一个项目中使用/学习RoR,我必须使用.NET DLL。 Ruby能够导入.NET DLL吗?

为COM接口启用编组需要什么?

我有一个没有types库的32位ATL COM组件。 它有一个给定的类的类工厂,实现了几个接口。 当我使用它作为进程内服务器时,一切正常 – 客户端调用CoCreateInstance(),对象被实例化,QueryInterface()检索指向所请求的接口的指针。 但是,当我把组件到COM +中,我不再可以实例化类 – CoCreateInstance()现在返回E_NOINTERFACE。 我相信问题是COM +不能执行编组,因为没有types库 – 它不知道该怎么做。 我是否需要生成并注册一个types库来解决这个问题,或者还有其他方法吗?

为什么通过同一个COM对象的不同接口获取的I​​Unknown *指针具有相同的值?

我有以下层次的COM接口和一个类实现它们: interface IX : public IUnknown{}; interface IY : public IUnknown{}; class CA: public IX, public IY{}; 这里class CA有效地inheritance了两次IUnknown 。 我们知道class CA有两个vtable指针 – 一个指向IX ,另一个指向IY 。 所以存储在IX子对象中的IUnknown存储在IY子对象中的IUnknown不同。 然而,当我们在同一个对象上调用IX::QueryInterface()或IY::QueryInterface()并查询IUnknown我们得到了相同的IUnknown*指针。 为什么会发生?

setEvent被调用,没有ResetEvent

如果使用setEvent设置手动重置事件但不使用ResetEvent重置会发生什么情况; 并且该事件被多次触发。当事件正在处理时,再次设置事件。 以下是示例任务: void foo() { … SetEvent(hEvent1); … } void foo1() { … SetEvent(hEvent2); … } int MainHandler() { … dwEvent = WaitForMultipleObjects(2, ghEvents, // array of objects FALSE, // wait for any object 5000); switch(dwEvent) { case hEvent1: //do something break; case hEvent2: //do something break; } } 现在,假设hEvent1的情况正在执行(即它仍然被设置),不知何故hEvent1被触发。 我故意不把ResetEvent(hEvent1),即使它是一个手动重置事件。 那么,我们有竞争条件吗?

RegAsm如何使它涵盖32位和64位?

我有一个由C#编写的DLL文件,我的系统是Windows 7 64位。 当我应用RegAsm时,不会将registry添加到64位path,而只是将其添加到32位path。 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll" 那么如果我检查我的GUID regedit.exe我看到我只有在32位registrypath: HKEY_CLASSES_ROOT\CLSID\{… my guid is found here ….} 而不是HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{… not found my guid …} 所以我有这个问题的其他问题。 任何人都可以请build议发生了什么,为什么不使32位和64位registry项?

致命错误:未find类“COM”PHP。 Win7 – Apache – PHP

$myapp = new COM("word.application"); // returns a fatal error: "Class 'COM' not found in c:/www/comConnector.php" shell_exec("whoami"); //returns "NT authority/system" 我的系统设置 Win7 Pro Apache服务器版本:Apache / 2.2.23(Win32) PHP PHP 5.3.16(cli)(内置:2012年8月15日20:06:57) 版权所有(c)1997-2012 PHP集团 Zend Engine v2.3.0,版权所有(c)1998-2012 Zend Technologies

IGraphBuilder :: RenderFile()与VFW_E_BAD_KEY失败 – 0x800403f2

继续调查embedded式WindowsMediaPlayer问题 ,我试图做一个简单的文件播放通过DirectShow进程内服务器: ::CoInitializeEx(0, COINIT_MULTITHREADED); CComPtr<IGraphBuilder> spGraph; spGraph.CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER); CComQIPtr<IMediaControl> spMediaControl(spGraph); // … later: spGraph->RenderFile(L"c:\\foo.wav", 0); // fails with VFW_E_BAD_KEY spMediaControl->Run(); 有趣的是,当在独立应用程序中进行testing时,这两个系统(Windows XP 32和x64)都能正常运行。 但是,在我的真实使用情况下,这是一个基于NPAPI的浏览器插件,也就是一个加载到Firefox / Chrome / Opera中的DLL。 有没有人有一个想法在这里可能会出错? 或者还有什么想法? 更新:也在微软论坛上提问。 UPDATE2: IGraphBuilder::AddSourceFilter(path,path,&base)已经失败与以下registry调用(在进程监视器中看到): “RegOpenKey”,“HKCU \ Software \ Classes \ c”,“NAME NOT FOUND”,“Desired Access:Query Value,Maximum Allowed” “RegOpenKey”,“HKCU \ Software \ Classes \ Media Type \ […]

代理/存根是暴露接口?

假设我介绍了一个COM接口,并且不希望任何第三方使用它 。 我完全控制了COM组件和保存接口定义的IDL文件的来源。 我的COM组件将需要编组的东西来回接口,所以我需要实现IMarshal或提供一个typelib或提供一个代理/存根(stub) 。 显然,如果我提供一个typelib,任何人都可以检查它,并find我的界面是什么以及如何使用它。 这不是我想要的。 如果我使用代理/存根? 它会暴露的接口,让任何人检查它或将保持接口的细节隐藏?