让C#ActiveX/COM库通过JScript工作
我已经检查了stackoverflow(以及其他地方的情况)。我希望COM解决方案能够正常工作,这样jscript文件就可以像让C#ActiveX/COM库通过JScript工作,c#,com,activex,jscript,C#,Com,Activex,Jscript,我已经检查了stackoverflow(以及其他地方的情况)。我希望COM解决方案能够正常工作,这样jscript文件就可以像 var T = new ActiveXObject("MySimulator.World"); T.MyMethod(); 它将在命令提示符下由 cscript mytest.js 在这种情况下,我得到错误“自动化服务器无法创建对象” 在C#中,我遵循了各种建议,最新的界面是: [ComVisible(true)] [InterfaceType(ComInterf
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()
{
...
}
...
}
谢谢,如果需要更多信息,请告诉我。我假设如下。您的开发环境可能是一个64位操作系统,您的C#DLL项目可能配置为使用
任何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):
输出:
MyFunction调用了
实现此功能的几个步骤,其他问题已经很好地介绍了这些步骤。然而,没有人把这个名字完全弄错了。假设名称空间名称实际上是MySimulator,ProgID是“MySimulator.MyReader”,要调用的方法是MyFunction,而不是MyMethod.Hans-谢谢您的关注。在尝试不同的事情之前,我的想法是正确的。将其更改回MySimulator.MyReader并不能修复它。我已经研究并尝试了十几种可能的解决方案,但都不管用。我想知道,什么是关键/关键的,以便jscript能够看到它,从而通过jscript创建对象?再次感谢。
var T = new ActiveXObject("MySimulator.World");
T.MyFunction();