私はこれを行う方法を知っていると思いましたが、明らかにそうではないので、助けていただければ幸いです。dllを登録できないため、VBSなどでインスタンス化できます。
次のサンプルクラスを作成し、[アセンブリをCOMで表示する]をオンにし、[COM相互運用機能に登録する]をオンにして、ビルドしました。VBSからインスタンス化しようとすると、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーが発生します。
これはクラスコードです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Smurf
{
public class Pants
{
public string Explode(bool Loud)
{
string result;
if (Loud)
result = "BANG";
else
result = "pop";
return result;
}
}
}
...そしてこれはVBSです:
Dim a
Set a = CreateObject("Smurf.Pants")
msgbox("ok")
他に何をする必要がありますか?
ありがとう :)
[編集]
言及するのを忘れました、最初の失敗の後、私はREGSVR32とREGASMを試しました-助けにはなりません!
[/編集]
REGSVR32を試してみると、次のメッセージが表示されることに注意してください。
モジュール「C:... \ Smurf.dll」がロードされましたが、エントリポイントDllRegisterServerが見つかりませんでした。「C:... \ Smurf.dll」が有効なDLLまたはOCXファイルであることを確認してから、再試行してください。
それはどれくらい役に立ちますか?
これはコードの最新バージョンです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Smurf
{
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface IPants
{
[DispId(1)]
string Explode(bool Loud);
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IPantsEvents
{
string Explode(bool Loud);
}
[ComVisible(true)]
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IPantsEvents))]
public class Pants : IPants
{
public Pants() { }
[ComVisible(true)]
[ComRegisterFunction()]
public static void DllRegisterServer(string key) { }
[ComVisible(true)]
[ComUnregisterFunction()]
public static void DllUnregisterServer(string key) { }
[ComVisible(true)]
public string Explode(bool Loud)
{
string result;
if (Loud)
result = "BANG";
else
result = "pop";
return result;
}
}
}