私はC#クラスライブラリを作成しましたが、VB 6.0アプリケーションで使用しています。しかし、文字列を返すメソッドを呼び出そうとすると、オートメーションエラーが発生します。それ以外の場合はC#クラスが正常に動作しています。VB 6.0でのC#クラスのオートメーションエラー
理由は何ですか?
私はC#クラスライブラリを作成しましたが、VB 6.0アプリケーションで使用しています。しかし、文字列を返すメソッドを呼び出そうとすると、オートメーションエラーが発生します。それ以外の場合はC#クラスが正常に動作しています。VB 6.0でのC#クラスのオートメーションエラー
理由は何ですか?
fbinderによれば、アセンブリに強い署名を付け、いくつかの属性を使用する必要があります。使用する属性は次のとおりです。
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("00000000-0000-0000-0000-000000000000")]
[ComDefaultInterface(typeof(IExposedClass))]
public class ExposedClass : IExposedClass
{
//need a parameterless constructor - could use the default
public ExposedClass() { }
public string GetThing()
{
return "blah";
}
}
[ComVisible(true)]
[Guid("00000000-0000-0000-0000-000000000000")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IExposedClass
{
string GetThing();
}
あなたは強い、あなたのクラスライブラリに署名します。regasmに登録して、クラス定義の前にこれを置く必要があります。
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("Class GUID")]
また、あなたが希望メソッドを公開するためのインタフェースを定義する必要があります。インターフェイスには次の属性が含まれている必要があります。
[Guid("Interface GUID")]
[ComVisible(true)]
私はこれを行っています。また、tlbファイルを作成し、VB 6.0プロジェクトのリファレンスとして追加しました。しかし、私はまだ同じエラーが発生します。私はC#クラスからVB 6.0に文字列を返す。 – Bhaskar
自分のコードと同じになるようにコードを変更しましたが、エラーメッセージ "関数またはインターフェイスが制限付きとしてマークされているか、関数がVisual Basicでサポートされていないオートメーションタイプを使用しています" – Bhaskar
Guid属性をあなた自身のガイドを使用しますか?私は次のステップは、あなたのために登録されたRegAsmを見て、OleView(私は "c:\ ProgramFiles \ Microsoft Visual Studio \ COMMON \ Tools \ OLEVIEW.EXE"にある)で生成されたtlbを開くべきであることを示唆します。 別の考え方 - RegAsmは警告を出しますか? – Ant
私はあなたがこの答えを受け入れたという事実はあなたのために働いたことを意味します。 :) – Ant