VB6中的createObject在运行exe时失败

VB6中的createObject在运行exe时失败,vb6,createobject,Vb6,Createobject,我有一个VB6程序,它试图运行用C#编写的DLL。 这个DLL有一个COM接口,所以我可以用“CreateObject”在其中创建一个类的对象。 问题是,当我从VB6 IDE运行它时,它运行良好,但当我创建一个EXE并尝试运行它时,它抛出异常: “自动化错误。系统找不到指定的文件(-2147024894)。” 为什么会发生这种情况以及我如何解决它?查看项目、IDE中的引用,并查看哪个dll或ocx文件属于您使用CreateObject引用的对象(对象管理器也可能有助于查找)。 编译exe时,此d

我有一个VB6程序,它试图运行用C#编写的DLL。
这个DLL有一个COM接口,所以我可以用“CreateObject”在其中创建一个类的对象。 问题是,当我从VB6 IDE运行它时,它运行良好,但当我创建一个EXE并尝试运行它时,它抛出异常:
“自动化错误。系统找不到指定的文件(-2147024894)。”


为什么会发生这种情况以及我如何解决它?

查看项目、IDE中的引用,并查看哪个dll或ocx文件属于您使用CreateObject引用的对象(对象管理器也可能有助于查找)。
编译exe时,此dll文件也必须可用。通常,您需要将其注册到regsvr32.exe。

我用于处理此类问题的一种方法是在Visual Basic 6中打开“添加引用”对话框。我滚动可用COM库的列表,查看是否列出了有问题的DLL。如果是,那么CreateObject应该可以工作,您应该能够为它分配一个变量,并使用后期绑定来访问它的成员

此外,尝试暂时设置对变量的引用,而不是使用CreateObject使用=New,并查看它给您带来的错误消息(如果有)。一般来说,我发现它们比CreateObject抛出的信息更丰富

最后,如果您发布选择使用CreateObject而不是设置引用的原因,这会有所帮助。如果DLL是程序将持续使用的已知对象,则应设置引用并通常使用早期绑定

最后,错误可能是由C#COM DLL的依赖性而不是DLL本身造成的。例如,如果我要获取一个Com库并正确注册它,但它依赖于Com库Widget2000,并且它没有注册,那么它将抛出自动化错误。尤其是在EXE的安装环境而不是编译环境中测试EXE时

例如,假设我有一个用VB6编写的CAD程序,我有一个以MyCAD开头的源代码树。exe位于MyCAD/MainEXE中,形状库位于MyCAD/ShapeLibrary中。我运行IDE,一切正常。然后我进行设置,转到测试机,安装它,并在创建shapelibrary时出错


我要做的第一件事是检查MainEXE是否会直接从源代码树的MainEXE目录中运行。该测试将消除这是安装问题还是IDE版本的问题。然后,我会查看设置,看看哪些内容没有注册。还可以查看C#库的源代码或库的设置,并查看它需要哪些依赖项。由于它是一个编译过的COM DLL,所以您应该能够使用依赖项遍历工具来查看它需要什么COM引用。最后,确保安装了正确版本的.NET framework。

如果您在测试机器上编译C#DLL,请确保勾选了。如果您不是在同一台计算机上编译,则需要使用/codebase选项运行。

尝试将其作为安装程序进行编译,并将在编译安装程序包时使用的dll/com包括在内,以便您使用的dll/com将包含在exe..的编译中,并将其安装在windows中,而不仅仅是复制过去

什么操作系统?您是否以标准用户身份运行IDE而不是编译程序?您能否展示一个失败的小过程,即一些代码,但不是缺少重要细节的代码片段?请包含对象引用变量的声明,以便我们可以查看您是延迟绑定还是早期绑定。