2009-11-26 24 views
1

C#最简单的COM Interop应用程序泄漏内存 - 我做错了什么?

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

你的错误是使用COM的所有=) – 2009-11-26 17:56:24

+0

你可以给一点更多的细节?如果.NET com interop以某种方式损坏,我们将改变这项技术。不过,我希望看到我在上面的例子中发生的任何错误。 – 2009-11-27 13:46:32

回答

相关问题