我有进程内(DLL)COM服务器,但我决定以DllSurrogate运行,出于这个原因,我有非托管代码(Delphi):functionTComWrapper.GetServer:IUnknown;beginOleCheck(CoCreateInstance(ServerData^.ClassId,nil,CLSCTX_LOCAL_SERVER,IUnknown,Result));end;我现在正在使用C#:[DllImport("ole32.dll",EntryPoint="CoCreateInstance",CallingConvention=CallingConvention.S
CoCreateInstance是在我正在创建的接口(interface)上自动调用AddRef还是应该在之后手动调用它? 最佳答案 与COM的契约(Contract)是任何时候你从这样的函数中获得一个对象,例如CoCreateInstance()、QueryInterface()(这是CoCreateInstance()最终调用的)等,被调用者总是在调用AddRef()之前返回,调用者(你)总是在你完成后Release()。您可以使用CComPtr使这更简单,而且它只是做正确的事。现在,如果您需要将此指针传递给另一个希望它在对象生
CoCreateInstance是在我正在创建的接口(interface)上自动调用AddRef还是应该在之后手动调用它? 最佳答案 与COM的契约(Contract)是任何时候你从这样的函数中获得一个对象,例如CoCreateInstance()、QueryInterface()(这是CoCreateInstance()最终调用的)等,被调用者总是在调用AddRef()之前返回,调用者(你)总是在你完成后Release()。您可以使用CComPtr使这更简单,而且它只是做正确的事。现在,如果您需要将此指针传递给另一个希望它在对象生
我已经处理这个问题好几个小时了,它开始变得令人沮丧。:(我有一个在.NET4.0中创建的COMDLL,我希望能够使用VC++6中创建的遗留应用程序访问它。它对COM可见,我已经成功创建了TLB和SNK文件,将其移动使用遗留C++代码,#importedTLB,一切编译正常。运行以下命令:RegAsmProtracFunctions.dll/代码库gacutil/iProtracFunctions.dll他们都成功了。当我启动我的应用程序时,只要我点击CoCreateInstance,就会收到消息“类未注册”。我在RegEdit中注意到我的DLL似乎已注册。那时我做了一些研究,下载了Pr
这可能是一个菜鸟COM问题,但谷歌搜索提出的问题多于提供答案:对本地COM实例使用“operatornew”而不是CoCreateInstance是否安全?我做了什么:我实现了IOperationsProgressDialog接口(interface)http://msdn.microsoft.com/en-us/library/windows/desktop/bb775368(v=vs.85).aspx通过使用公共(public)继承,从而也实现了IUnknown接口(interface)。我通过“newRecyclerProgressCallback”创建了一个实例,并将其放入CO
我想拦截COMCoCreateInstanceEx和/或CoGetClassObject在单元测试中用测试垫片替换类的功能。这将仅针对单个CLSID;所有其他人都可以保持不变。有没有一种方法可以在不使用可怕、邪恶的黑客的情况下做到这一点? 最佳答案 总是有CoTreatAsClass函数:http://msdn.microsoft.com/en-us/library/ms693452(VS.85).aspx但是,正如您所指出的,它将在整个系统范围内替换类,而不是局部更改。或者,您可以按照ShayErlichmen的评论引用的帖子中的
我有一个COM类CMyCOMServer在一个应用程序中实现了IMyInterface,两者都具有正确的GUID。如果请求IUnknown或IMyInterface,CMyCOMServer::QueryInterface将返回S_OK(并将自身转换为正确的类型),否则返回E_NOINTERFACE。在同一台PC上的另一个应用程序中,我调用:HRESULThr=::CoCreateInstance(__uuidof(CMyCOMServer),0,CLSCTX_SERVER,__uuidof(IMyInterface),(void**)&pInterface);它返回E_NOINTER
我想以编程方式检索任何类的接口(interface)ID,以便我可以将它传递给CoCreateInstance。非常感谢任何帮助!!请参阅下面的“我如何获得此信息”:HRESULThResult;CLSIDClassID;void*pInterface;if(!(hResult=SUCCEEDED(CoInitialize(NULL)))){return1;}if(S_OK==CLSIDFromProgID(OLESTR("Scripting.FileSystemObject"),&ClassID)){hResult=CoCreateInstance(ClassID,NULL,CLSC