C#通过COM无法识别C#命名空间

时间:2013-05-01 18:28:26

标签: c++ com

我目前有一个C#类库

namespace Library
{
    [ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("aa950e58-7c6e-4818-8fc9-adecbc7a8f14")]
    public interface IQuote
    {
               ........
    }

}

然后我使用以下

注册它
RegAsm.exe C:\MyFile.dll /tlb:MyFile.tlb /codebase

现在我的C ++应用程序中存在的问题是

#import "c:\\MyFile.tlb" raw_interfaces_only
using namespace Library;

然后我收到消息

Error   7   error C2653: 'Library' : is not a class or namespace name   

有关如何解决此问题的任何建议?

2 个答案:

答案 0 :(得分:0)

COM本身没有命名空间的概念(特定于语言)。

RegAsm.exe使用程序集名称作为IDL中库语句的名称。它不关心COMVisible类所在的命名空间。

默认情况下,C ++编译器将类型库导入名称空间,其名称由IDL中的库语句指定。在C ++代码中使用程序集名称作为命名空间名称(或在import语句中重命名命名空间)。

答案 1 :(得分:0)

花2个小时来解决这个问题。

示例代码在这里:

#import "path\to\MyLibrary.tlb"      // DEFAULT assembly name  is  namespace
namespace MyNameSpace = MyLibrary;   // make alias back to your namespace

MyNameSpace::IMyClass1Ptr obj;       // use namespace here
obj.CreateInstance(__uuidof(MyNameSpace::MyClass1));  // access class in my namespace

希望有帮助。