我目前有一个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
有关如何解决此问题的任何建议?
答案 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
希望有帮助。