簡體   English   中英

無法創建名稱為“”的對象COM

[英]The object with the name “” could not be created COM

我得到以下COM對象

namespace PCKTicketCOM
{
   [Guid("0057ddf4-7125-485b-b963-5d2b338040bc"),
   InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
   public interface IPCKTicketCOM
   {
       [DispId(1)]
       int AddTheseUp(int adder1, int adder2);
   }

   [Guid("3c63584c-f51a-4ce8-8f24-734686895cba"),
   ClassInterface(ClassInterfaceType.None)]
   public class PCKTicketCOM : IPCKTicketCOM
   {
        // a method that returns an int
        public int AddTheseUp(int adder1, int adder2)
        {
            return adder1 + adder2;
        }
   }
}

並試圖通過VBS調用它,我總是得到錯誤

The object with the name "PCKTicketCom.PCKTicketCOM" could not be created

我對如何解決這個問題一無所知。

dim objTest, intResult
Set objTest = WScript.CreateObject("PCKTicketCOM.PCKTicketCOM")

intResult =  objTest.AddTheseUp(100,200)
WScript.echo "Result = " & intResult

我也似乎無法使用Google找到有關此問題的任何信息,我們將不勝感激。

您可以使用SysInternals的Process Monitor觀察注冊表的使用方式。 Regasm.exe和VBS腳本引擎(通常是cscript.exe)都可以。 這樣您將很容易發現不匹配。

如今,由於非常普遍的原因,您沒有意識到VBS腳本引擎在64位操作系統上以64位模式運行。 除非您明確運行c:\\ windows \\ syswow64 \\ cscript.exe,否則您將獲得32位版本。

64位程序在HKLM \\ Software \\ Classes \\ CLSID中查找,而32位程序在HKLM \\ Software \\ Wow6432Node \\ Classes \\ CLSID中查找。 請注意添加的Wow6432Node。 一個appcompat功能,可確保程序在意外加載位錯誤的可執行文件時不會崩潰。

如果使用項目的“生成”選項卡中的“注冊COM互操作”選項使Visual Studio注冊服務器,則將僅寫入32位Wow6432Node注冊表項。 VS的不可避免的副作用是32位進程。 如果您用Regasm.exe自己注冊,請確保選擇正確的。 將寫入64位密鑰的64位版本位於C:\\ Windows \\ Microsoft.NET \\ Framework64 \\ v4.0.30319中,請注意“ Framework64”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM