我已经检查了stackoverflow(以及其他地方看起来像什么)。我想得到一个COM解决方案,以便jscript文件可以写成
var T = new ActiveXObject("MySimulator.World");
T.MyMethod();
它将在命令提示符下执行
cscript mytest.js
在这种情况下,我收到错误“自动化服务器无法创建对象”。
在C#中,我遵循了各种建议,最新的界面是:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83B")]
public interface IComMyReaderInterface
{
void MyFunction();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None), Guid("0D53A3E8-E51A-49C7-944E-E72A2064F9DD"), ProgId("MySimulator.World")]
[ComDefaultInterface(typeof(IComMyReaderInterface))]
public class MyReader : IComMyReaderInterface
{
public MyReader()
{
...
}
public void MyFunction()
{
...
}
...
}
谢谢,如果需要更多信息,请告诉我。
答案 0 :(得分:2)
我假设以下内容。您的开发环境可能是64位操作系统,您的C#DLL项目可能配置为使用Any CPU
作为平台目标进行编译。如果是这样,请继续阅读。
选择x86
或x64
并编译项目。如果您使用x86
,请使用32位版本的RegAsm.exe注册程序集:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase assembly.dll
然后使用32位版本的cscript.exe运行JavaScript测试:
C:\Windows\SysWOW64\cscript.exe mytest.js
如果你选择x64
,那就是:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase assembly.dll
C:\Windows\System32\cscript.exe mytest.js
[已编辑] 以下代码已经过验证,可以使用上述说明进行操作。
<强> C#:强>
using System;
using System.Runtime.InteropServices;
namespace ComLibrary
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual),
Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83B")]
public interface IComMyReaderInterface
{
void MyFunction();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None),
Guid("0D53A3E8-E51A-49C7-944E-E72A2064F9DD"),
ProgId("MySimulator.World")]
[ComDefaultInterface(typeof(IComMyReaderInterface))]
public class MyReader : IComMyReaderInterface
{
public MyReader()
{
}
public void MyFunction()
{
Console.WriteLine("MyFunction called");
}
}
}
JavaScript (mytest.js):
var T = new ActiveXObject("MySimulator.World");
T.MyFunction();
<强>输出强>:
MyFunction called