2009-09-20 12 views
5

मैं क्यूटीपी से एक सी # डीएल कॉल करने की कोशिश कर रहा हूं (vbscript का उपयोग करता है)। मुझे कोई सफलता के साथ चीजों के एक नंबर की कोशिश की है:vbscript में कॉलिंग सी # डीएल

  • विजुअल स्टूडियो 2010
  • सी # वर्ग पुस्तकालय (st.dll) बनाएं

कोड:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace st 
{ 
    public class Class1 
    { 
     public static int GetValue() 
     { 
      return 34; 
     } 
    } 
} 
  • regasm /codebase st.dll
    • विफल रहता है

QTP/VBScript में, मैं कोशिश की है

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • रिटर्न संदेश 'क्योंकि यह एक मान्य नेट विधानसभा नहीं है': 'अमान्य प्रक्रिया कॉल या तर्क '

क्यूटीपी के बावजूद, मैं किसी .vbs फ़ाइल से C# dll को कॉल करने के तरीके के बारे में किसी भी अंतर्दृष्टि की सराहना करता हूं।

+0

आप के रूप में COM-दिखाई दे यह चिह्नित है? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

मैं प्रॉपर्टी> असेंबली सूचना में गया हूं और 'असेंबली COM-Visible बनाएं' चेक किया है। अभी भी उपरोक्त त्रुटियां प्राप्त करें। –

+0

अभी भी संघर्ष कर रहा है ...मैंने 'स्थैतिक' कीवर्ड हटा दिया, व्यवस्थापक के रूप में वीएस 2010 चलाया और COM इंटरऑप के लिए प्रॉपर्टी> बिल्ड> रजिस्टर चालू कर दिया। –

उत्तर

8

मैं ऐसा करके यह काम कर प्राप्त करने में सक्षम था निम्नलिखित:

वी.एस. में एक नया सी # dll बनाएं 2010.

namespace st4 
{ 
    public class st4_functions 
    { 
     public int GetValue() 
     { 
      return 34; 
     } 
    } 
} 

QTP में मैं निम्नलिखित लाइनों कहा:

Set obj = DotNetFactory.CreateInstance("st4.st4_functions", "c:\\st4.dll") 
MsgBox obj.GetValue() 

मेरी समस्या का जवाब देने वाले सभी के लिए धन्यवाद। हालांकि मैंने COM समाधान नहीं किया, लेकिन मुझे यह सोचने लगा कि मैं .NET के साथ रह सकता हूं और इस समाधान का नेतृत्व कर रहा हूं। अच्छा काम सब!

संपादित करें:

मैं विस्तार करने के लिए कदम एक ब्लॉग पोस्ट बनाया है और अतिरिक्त जानकारी प्रदान:

http://www.solutionmaniacs.com/blog/2012/5/29/qtp-calling-c-dll-in-vbscript.html

+0

यह COM के माध्यम से जाने से निश्चित रूप से बेहतर है। :-) –

1

जैसा मार्क ने कहा, लेकिन मुझे लगता है कि यह एक जवाब योग्यता है। यदि आप सुनिश्चित करते हैं कि आपका डीएलएल कॉम यांत्रिकी के बावजूद उपलब्ध होगा, तो आपकी स्क्रिप्ट CreateObject जैसी चीज़ों के साथ कॉल करने में सक्षम होना चाहिए।

How to register .NET assembly for COM interop

+0

मैंने असेंबली COM-Visible बनाया। क्यूटीपी/वीबीएस में मैंने जोड़ा है: मंद उदाहरण उदाहरण सेट करें = CreateObject ("st.Class1") लेकिन मुझे एक त्रुटि मिलती है: ActiveX घटक ऑब्जेक्ट नहीं बना सकता: 'st.Class1' –

1

आपका समारोह स्थिर है। स्टेटिक क्लास सदस्यों को इंटरफ़ेस सदस्यों से मेल नहीं किया जा सकता है, और यदि यह .NET इंटरफ़ेस को कार्यान्वित नहीं कर सकता है तो यह निश्चित रूप से COM इंटरफ़ेस को लागू नहीं करेगा।

+0

मैंने स्थिर कीवर्ड हटा दिया है । एक ही समस्या है। QTP के बिना इस तरह से काम करने के लिए एक साधारण वर्ग प्राप्त करने पर कोई ट्यूटोरियल है? मैं समझने के लिए सबसे सरल उदाहरण की तलाश में हूं कि मुझे क्या करना है। –