C#
namespace TestController
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IController {
void DoSomething();
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None)]
public class ControllerImpl : IController {
public void DoSomething()
{
throw new NotImplementedException();
}
}
}
C ++
#import "c:\prj\Controller\bin\Debug\TestController.tlb"
using namespace TestController;
int _tmain(int argc, _TCHAR* argv[])
{
IControllerPtr ctrl;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
while (true) {
HRESULT hr = ctrl.CreateInstance(__uuidof(ControllerImpl));
ctrl = 0;
}
return 0;
}
大家好,
我需要从非托管代码提供对我的.NET类库的访问。 Beeing对这个主题完全陌生,我花了几天研究COM / interop,然后定义并实现了一个COM可访问的界面,进行了测试运行,一切正常,直到我注意到一些看起来像是内存泄漏的东西。我隔离了有问题的陈述,但仍然不知道为什么上面的代码被破坏了。
答案 0 :(得分:0)
这可能是以下情况:
http://jpassing.com/2009/03/26/rcw-reference-counting-rules-com-reference-counting-rules/
具体来说,.NET使用RCW引用计数规则,这些规则与COM应用程序中通常的引用计数规则不同。
这导致明显的泄漏,直到.NET RCW引用计数观察到不再使用给定对象,这需要来自其垃圾收集器的协作。