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 のライブラリ ステートメントで指定された名前の名前空間にインポートします。C++ コードでアセンブリ名を名前空間名として使用します (または import ステートメントで名前空間の名前を変更します)。

于 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 に答える