Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让C#ActiveX/COM库通过JScript工作_C#_Com_Activex_Jscript - Fatal编程技术网

让C#ActiveX/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

我已经检查了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()
    {
         ...
    }
 ...
}

谢谢,如果需要更多信息,请告诉我。

我假设如下。您的开发环境可能是一个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();