Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 图示器COM与C的连接 我一直在尝试用C来自动化金软件的Trofor版本15。C++程序的指南看起来很旧,但是我不确定它是否以类似的方式应用。 使用所有标准选项创建新的基于AppWizard对话框的应用程序。 编辑主对话框资源以包含所需的UI。在本例中,将显示“运行并关闭”按钮。 使用类向导为“运行”按钮添加处理程序。 启动类向导,从类型库中选择“添加类…”。。。 Grapher的类型库包含在Grapher.tlb文件中,因此请选择此文件。按顺序重命名类、文档、工作表、应用程序、文档。添加所有类。_C#_Com - Fatal编程技术网

C# 图示器COM与C的连接 我一直在尝试用C来自动化金软件的Trofor版本15。C++程序的指南看起来很旧,但是我不确定它是否以类似的方式应用。 使用所有标准选项创建新的基于AppWizard对话框的应用程序。 编辑主对话框资源以包含所需的UI。在本例中,将显示“运行并关闭”按钮。 使用类向导为“运行”按钮添加处理程序。 启动类向导,从类型库中选择“添加类…”。。。 Grapher的类型库包含在Grapher.tlb文件中,因此请选择此文件。按顺序重命名类、文档、工作表、应用程序、文档。添加所有类。

C# 图示器COM与C的连接 我一直在尝试用C来自动化金软件的Trofor版本15。C++程序的指南看起来很旧,但是我不确定它是否以类似的方式应用。 使用所有标准选项创建新的基于AppWizard对话框的应用程序。 编辑主对话框资源以包含所需的UI。在本例中,将显示“运行并关闭”按钮。 使用类向导为“运行”按钮添加处理程序。 启动类向导,从类型库中选择“添加类…”。。。 Grapher的类型库包含在Grapher.tlb文件中,因此请选择此文件。按顺序重命名类、文档、工作表、应用程序、文档。添加所有类。,c#,com,C#,Com,对我来说,这意味着我尝试在开发人员提示符中使用tlbimp命令,我使用该命令将grapher.tlb文件转换为GrapherTypeLib.dll。我进一步使用regasm注册了这个文件,似乎这是必要的 我将对GrapherTypeLib.dll的引用添加到我的C项目中,同时使其不嵌入并具有本地副本 但是,对于我的代码: using System; using System.Data; using GrapherTypeLib; public class Grapher15 {

对我来说,这意味着我尝试在开发人员提示符中使用tlbimp命令,我使用该命令将grapher.tlb文件转换为GrapherTypeLib.dll。我进一步使用regasm注册了这个文件,似乎这是必要的

我将对GrapherTypeLib.dll的引用添加到我的C项目中,同时使其不嵌入并具有本地副本

但是,对于我的代码:

using System;
using System.Data;

using GrapherTypeLib;

public class Grapher15
    {
        public Grapher15(Functions _function, string _data, DataTable _summary, IProgress<int> progress)
        {
            try
            {
                CreateProfiles(_data);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void CreateProfiles(string _data)
        {
            // Create an instance which can work in the background
            IAppObject _instance = new ApplicationClass();
            _instance.Visible = true;
        }
    }
我总是在尝试创建应用程序时崩溃。我应该注意到,我在这里尝试了不同的选项,包括新的应用程序,结果是相同的:

System.Runtime.InteropServices.COMException:“检索CLSID为{41F3A3D2-EAF3-42F0-9F62-A6E55F08F7E7}的组件的COM类工厂失败,原因是以下错误:80040154类未注册,HRESULT异常:0x80040154 REGDB_E_CLASSNOTREG。”

基于我的上述检查和regasm,我会认为一切都已正确注册。我应该注意的是,当第一次启动时,我还重新安装了程序,以确保所有注册都正确完成。但是,我随后决定检查regedit,但它实际上似乎没有它要查找的CLSID:

我开始调查并使用ildasm,发现这个GUID与GrapherTypeLib.ApplicationClass的注册表值匹配,GrapherTypeLib.ApplicationClass似乎没有在regid列表中注册。同时,ildasm注意到,例如,GrapherTypeLib.Application的值与上面regid列表中的值不同


因此,作为一个简短的结论——有人知道上面的问题是什么吗?

这看起来像是x86/x64问题。屏幕截图显示您注册了x64,但您的exe可能以x86运行。谢谢@SimonMourier。实际上我没有提到上面的内容,因为我已经忘记了,但是我已经尝试将解决方案组装为x64和x86,并且两个都出现了相同的错误。Grapher本身是作为64位应用程序安装的,如果这会产生影响的话。在{41F3A3D2-EAF3-42F0-9F62-A6E55F08F7E7}上的REGDB_E_CLASSNOTREG意味着COM查找的位置缺少注册表项{41F3A3D2-EAF3-42F0-9F62-A6E55F08F7E7}。要确保COM的外观,请在.exe和注册表访问上使用诸如procmon from sysinternals filter之类的工具