0

我目前有一个 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   

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

4

2 回答 2

0

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

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

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

于 2013-05-01T19:40:13.513 回答
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

希望有帮助。

于 2018-07-24T04:33:13.033 回答