わかりました、私は夢中になります。シンプルな .net アセンブリを COM オブジェクトとして使用できるようにしようとしましたが、うまくいきません。私は多くの異なるアプローチを試みてきましたが、どれもうまくいきません。これまでのところ、私が持っている最も近いものは、属性、インターフェース、手動登録などの量が最も少ないものです.
次のようなテストとして vbscript があります。
Dim o
o = CreateObject("MyNamespace.MyClass")
msgbox o.Test()
私のC#コードは次のようになります:
using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{
[ProgId("MyNamespace.MyClass")]
public class MyClass
{
public string Test()
{
return "teststring";
}
}
}
私のプロジェクト(VS2008)では、「アセンブリCOMを表示する」を選択しました。これにより、AssemblyInfo.csに属性が追加され、「COM相互運用に登録する」もチェックされました。
ProgId は実際には違いがないことがわかります (私の場合はとにかく) - 実際の名前空間 + クラス名を指定している限り、それをオーバーライドすることができます。
問題は、私の CreateObject はうまくいきますが、メソッド Test() が見つからないということです。実際、dll を取得して tlb を抽出すると、メソッドがまったく表示されないと予想されます。
私が得るエラーはこれです:
C:\inetpub\wwwroot\ASPTest\testrun.vbs(3, 1) Microsoft VBScript ランタイム エラー: オブジェクトはこのプロパティまたはメソッドをサポートしていません: 'Test'
フィードバックをいただければ幸いですが、私が試したことをお知らせします。クラスで Guid と AttributeGuid をいじり、クラスで明示的に COMVisible を定義しました。
最後の注意 - ほとんどのテストは署名されていないアセンブリを中心に展開されましたが、エラーを特定しようとして、ストロングネーム/キーでも試しましたが、何もしませんでした。
誰でも問題を見つけるのを手伝ってくれますか?