当前位置: 首页 > 编程语言 > C#

无法从VBA实例化用C#编写的COM对象(VB6确定)分享

时间:2023-04-11 10:41:40 C#

C#学习教程:无法从VBA实例化用C#编写的COM对象(VB6ok)通用的;使用系统文本;使用System.Runtime.InteropServices;使用System.Windows.Forms;namespaceTestCom{[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")][ClassInterface(ClassInterfaceType.AutoDual)][ProgId("Test9.COMINT")]publicclassTestComClass{publicvoidInit(stringuserid,stringpassword)){MessageBox.Show(string.Format("{0}/{1}",userid,password));如果我构建它并在生产机器上注册,这很好用.Init"A","B"EndSub这个完全相同的代码从Excel中的VBA调用“自动化错误”(0x80131700)在开发机器上一切正常,而不仅仅是在生产机器上安装.NET和MSOffice。更新我认为这与在Excel下运行时未正确初始化.NET框架有关。如果我使用Filemon,我可以看到它跳过了对MSCORWKS.DLL的查找。当我从VBScript调用同一个对象时,它发现MSCorwks.dll很好。当我从VBA调用CorBindToCurrentRunTime以尝试强制加载CLR时,有趣的是我得到与我在VBA中执行CreateObject()时完全相同的HRESULT(0x80131700)。所以我认为这是一个框架初始化问题。我将回答我自己的问题,希望能将其他人从我刚刚忍受的乏味苦差事中解救出来。如果您收到此消息,那是因为基于.NET的COM程序集无法找到.NETFramework。解决方案很简单。创建一个文件,内容如下命名为“Excel.Exe.Config”,并将其放在与“EXCEL.EXE”相同的目录下问题解决了!安装以下修复程序将解决问题http://www.microsoft.com/downloads/details.aspx?FamilyID=1b0bfb35-c252-43cc-8a2a-6a64d6ac4670&displaylang=enRC1,我使用你的VBScript代码和Office2007Excel代码在测试这一切时,一切正常。由于您能够以VB6形式创建COM对象,我们应该假设您的.net框架没有问题。你能排除VBA的问题吗?您可以创建一个.vbs文件并将其放入其中:DimoAsObjectSeto=CreateObject("Test9.COMINT")o.Init"A","B"保存文件并双击它。如果您遇到错误,那么我认为它的注册存在问题,如果您没有收到错误,那么我会查看Office和VBA以查看是否缺少某些内容或未正确安装。另一种选择是添加对COM对象的引用并使用早期绑定?我认为您可能需要先导出类型库,但您应该能够添加引用并简单地添加对象。这适用于VBA...我尝试使用Word和Excel2003(SP3)。我不确定您所说的“生产”机器是什么意思。因为这是一个“客户端”应用程序,所以必须使用Excel在客户端上执行。如果你在服务器上自动化Excel并通过VBA调用触发这个“互操作”,你就有麻烦了:)假设在生产中你指的是用户将使用Excel模板/文档的客户端计算机,这些是以下内容指针:确保您拥有正确的.Net框架您拥有最新的Office服务包尝试确定这是否是权利问题。如果您喜欢冒险,可以使用ProcessExplorer[来自Microsoftsysinternals站点]来查看加载了哪些DLL以及出现错误的位置,并将其与开发箱中的列表进行比较。希望这可以帮助。rc1是正确的,因为这是Office无法决定使用哪个版本的框架时抛出的.net错误。然而,Office并没有因为它的选择而受到影响。Office2003与.NET2.0交互的方式存在错误。安装来自Microsoft(KB908002)的修复程序是一种比强制Excel在特定版本的.net中运行更灵活的解决问题的方法。另见:http://www.biopdf.com/guide/trouble_shoot_microsoft_office_2003.php以上就是C#学习教程:UnabletoInstantiateCOMObjectsWritteninC#fromVBA(VB6OK)如果对大家有帮助,请分享完整内容有用以及需要了解更多C#学习教程的,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: