2010-05-01 11 views
6

.NET COM इंटरऑप अब तक काफी अच्छी तरह से काम कर रहा है। चूंकि मैंने विंडोज 7 में अपग्रेड किया है, इसलिए मुझे अब काम करने के लिए मेरी .NET COM ऑब्जेक्ट नहीं मिलती हैं।विंडोज 7 64 बिट पर .NET COM इंटरऑप मुझे सिरदर्द देता है


namespace Crap 
{ 
    [ComVisible(true)] 
    [Guid("2134685b-6e22-49ef-a046-74e187ed0d21")] 
    [ClassInterface(ClassInterfaceType.None)] 
    public class MyClass : IMyClass 
    { 

     public MyClass() 
     {} 

     public void Test() 
     { 
      MessageBox.Show("Finally got in here."); 
     } 

    } 
} 



namespace Crap 
{ 
    [Guid("1234685b-6e22-49ef-a046-74e187ed0d21")] 
    public interface IMyClass 
    { 

    } 
} 

 

विधानसभा ComVisible चिह्नित है साथ ही:

मेरे COM ऑब्जेक्ट के रूप में आसान के रूप में है।

मैं विधानसभा

regasm /codebase /tlb "path"

रजिस्टरों (व्यवस्थापक मोड) का उपयोग कर सफलतापूर्वक रजिस्टर। मैंने विनियम 32 और 64 बिट की कोशिश की। दोनों बार मैं त्रुटि

"ActiveX घटक नहीं कर सकते वस्तु Crap.MyClass बनाने" इस VBScript का उपयोग कर पाने:


dim objReg 
Set objReg = CreateObject("Crap.MyClass") 
MsgBox typename(objReg) 
 

fuslogvw मुझे किसी भी संकेत या तो नहीं देता है। वह COM ऑब्जेक्ट मेरी Vista 32 बिट मशीन पर पूरी तरह से काम करता है।

मुझे समझ में नहीं आता कि मैं उस समस्या के लिए समाधान क्यों नहीं कर पा रहा हूं .. क्या मैं वास्तव में एकमात्र व्यक्ति हूं जिसने कभी उस समस्या में प्रवेश किया है?

ओले व्यू को देखते हुए मुझे लगता है कि मेरी ऑब्जेक्ट सफलतापूर्वक पंजीकृत है। मैं अन्य COM ऑब्जेक्ट्स भी बनाने में सक्षम हूं .. यह केवल मेरे अपने साथ काम नहीं करता है।

धन्यवाद, केविन

+0

क्या आप इस धागे को उत्तर के रूप में चिह्नित कर सकते हैं? धन्यवाद :) –

उत्तर

2

मैं एक सी # व्यक्ति नहीं हूँ, लेकिन यहाँ एक नमूना है कि मैं VB.net से परिवर्तित है पंजीकृत करता है बनाने के लिए है। नोट, मुझे यह सुनिश्चित करना था कि मेरे पास परियोजना स्तर पर एक ही नामस्थान था, फिर वीबी परियोजनाओं में यह कक्षा। मैं समझता हूं कि सी # परियोजनाओं में यह अलग है।

[ComClass(MyClass.ClassId, MyClass.InterfaceId, MyClass.EventsId)] 
public class MyClass { 

    // These GUIDs provide the COM identity for this class 
    // and its COM interfaces. If you change them, existing 
    // clients will no longer be able to access the class. 
    public const string ClassId = "f58411e1-1689-4bf3-a0e1-b49f479e28ba"; 
    public const string InterfaceId = "f4a575c6-62d2-44eb-af0f-f5b2bb65ad51"; 
    public const string EventsId = "ad56e4f9-3512-4233-aae4-7d1c2457c08f"; 

    // A creatable COM class must have a Public Sub New() 
    // with no parameters, otherwise, the class will not be 
    // registered in the COM registry and cannot be created 
    // via CreateObject. 
    public SalePayStatus() : base() 
    { 
    } 
} 

यदि मैं COM के बारे में चिंतित हूं, तो मैं हमेशा उचित प्रविष्टियों को सुनिश्चित करने के लिए रजिस्ट्री में जांच करता हूं। मुझे पता चला है कि वर्जनिंग और एमएसआई इंस्टॉलेशन कारणों का कारण बनता है, विशेष रूप से अनइंस्टॉल करना (रजिस्ट्री को साफ़ नहीं करता है) या पुनः स्थापित और .NET COM ऑब्जेक्ट्स के साथ एमएसआई जो मौजूदा COM प्रविष्टि को ओवरराइट करता है, सभी प्रकार की परेशानी का कारण बनता है।

मुझे आम तौर पर लगता है कि आपको x64 बनाम x32 build .net DLLs के बारे में सावधान रहना होगा।उदाहरण के लिए आपको वीबीएस इंजन के सी: \ विंडोज \ SysWow64 \ या C: \ Windows \ System32 \ संस्करणों को स्पष्ट रूप से संदर्भित करना पड़ सकता है।

अंत में यदि आप x32 COM.NET घटक वाले x64 सर्वर पर एएसपी वेब साइट में वीबीएस का उपयोग करते हैं, तो आपको आईआईएस 7 एप्लिकेशन पूल उन्नत विकल्प सुनिश्चित करना होगा कि 32 बिट एप्लिकेशन सही/गलत है।

1

धन्यवाद! मुझे नहीं पता था कि मुझे 2 रजिस्ट्रीज का ख्याल रखना है .. मुझे लगता है कि Win7 64 बिट पर स्विच करने के बारे में समय था :)

धन्यवाद।

अन्य सभी को है कि एक ही समस्या में चलाता है के लिए: WScript (ग्राहक कि vbs फ़ाइलें आमतौर पर निष्पादित करता है) 64 बिट मोड में निष्पादित किया जाता है => RegAsm 64 बिट प्रयोग की जाने वाली

एक्सेल जैसे अन्य आम ग्राहकों में क्रियान्वित कर रहे हैं है 32 बिट मोड => RegAsm 32 बिट का उपयोग किया जाना है।

विजुअल स्टूडियो 32 बिट = में निष्पादित किया गया है> COM इंटरऑप के लिए रजिस्टर केवल 32 बिट रजिस्ट्री में COM ऑब्जेक्ट को पंजीकृत करता है।

केवल एक चीज मैं अब यह पता लगाने की है कि कैसे सुनिश्चित करें कि वी.एस. सेटअप दोनों संस्करणों

+1

इस धागे की तरह लगता है उत्तर दिया गया है, कृपया उत्तर को चिह्नित करें जो आपको सबसे अधिक मदद करता है। –

+0

यह एक (श्रृंखला) टिप्पणी (या) मूल पोस्ट में एक संपादन होना चाहिए था। –