2013-05-01 78 views
0

由C++不承认我现在有一个C#类库这样通过COM

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问题C#命名空间++应用程序是

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

,然后我得到的消息

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

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

+0

图书馆是一个非常普遍的词,并可能在某个地方具有特定的含义。你是否尝试过使用相同设置的不同名称? – Chris 2013-05-01 18:30:44

+0

破解打开调试/发布文件夹中生成的.tlh和.tli文件,并查看正在使用的命名空间(如果有的话)。这可能不是你的想法。 – WhozCraig 2013-05-01 18:31:21

+0

让我检查tlh和tli文件 – MistyD 2013-05-01 18:35:55

回答

0

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

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

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