2017-07-06 14 views
0

typeofの代わりにComSourceInterfacesの文字列パラメータを使用しようとすると、アセンブリをCOMオブジェクトとして登録できません。私は複数のインターフェイスを実装しています。なぜなら、SDKが必要とするインターフェイスなのでです。typeofの代わりにComSourceInterfacesの文字列パラメータを使用しようとすると、COMオブジェクトとしてアセンブリを登録できません。

私は

[ComVisible(true), 
ClassInterface(ClassInterfaceType.None), 
ComSourceInterfaces("IAccessControl"), 
Guid("738CFFEF-37DC-4C61-957E-C5A78FE20223")] 
public class EventGeneratorV2 : IAccessControl 

を使用すると、私はエラーに

エラーMSB3217取得:アセンブリを登録することはできません "... \イベントジェネレータv2.dllを"。タイプ 'IAccessControl'をアセンブリからロードできませんでした。イベント ジェネレータv2、バージョン= 1.1.0.0、カルチャ=ニュートラル、 PublicKeyToken = bffdb712704a75b7 '

しかし、私はそれが正常に動作しない

[ComVisible(true), 
ClassInterface(ClassInterfaceType.None), 
ComSourceInterfaces(typeof(IAccessControl)), 
Guid("738CFFEF-37DC-4C61-957E-C5A78FE20223")] 
public class EventGeneratorV2 : IAccessControl 

を使用するように私のコードを変更した場合。また、IAccessControlインターフェイスの完全修飾名Lib.Interfaces.IAcccessControlを文字列として試しましたが、それでも失敗します。最高の解決策は、複数のComSourceInterfacesを使用することですが、これは一度しか使用できず、typeofを使用して最大4つのインターフェイスを使用します。私はそれがこの他のソフトウェアと互換性があるために実装する必要がある9つのインターフェイスがあります。文字列を動作させる方法はありますか?

答えて

0

わかりました。文字列は実際には各インターフェイスの "Lib.Interfaces.IAcccessControl、Lib"です。最初の部分はインタフェースの完全修飾名であり、libはインタフェースが由来する参照名です。

他のインターフェイスを追加すると、それぞれの間に\ 0を追加する必要があります。だから私の最終的なComSourceInterfacesはかなり長いです。

ComSourceInterfaces("Lib.Interfaces.IAccessControl, Lib\0Lib.Interfaces.IAccessControl2, Lib\0Lib.Interfaces.ITranslate, Lib\0Lib.Interfaces.ITranslate2, Lib\0Lib.Interfaces.IComConfig, Lib\0Lib.Interfaces.IComConfig2, Lib\0Lib.Interfaces.IInput, Lib\0Lib.Interfaces.IInput2, Lib\0Lib.Interfaces.IAsset, Lib\0Lib.Interfaces.IAsset2, Lib\0Lib.Interfaces.IFakeName, Lib\0Lib.Interfaces.IComManager, Lib\0Lib.Interfaces.IDistributeEvent, Lib") 

その後、DLLが正しくコンパイルされ、正しく登録されます。

関連する問題