के लिए अनियंत्रित किया जा सकता है। मैंने VS2005 का उपयोग करके एक सरल सी # डीएलएल (यह एक बहुत बड़ी परियोजना का हिस्सा है) बनाया है। मुझे एक्सेल में डीएलए कोड के माध्यम से डीएलएल का उपयोग करने की ज़रूरत है, इसलिए मैं असेंबली पर COM इंटरऑप का उपयोग कर रहा हूं। मैं निर्माण प्रक्रिया को स्वचालित रूप से आवश्यक टीएलबी फ़ाइल उत्पन्न करने की कोशिश कर रहा हूं ताकि मुझे कमांड लाइन पर जाने और प्रत्येक निर्माण के बाद regasm का उपयोग करने की आवश्यकता न हो।चेतावनी MSB3391: <DLL> में कोई भी प्रकार नहीं है जिसे COM इंटरॉप
मेरी समस्या यह है कि हालांकि डीएलएल संकलित करता है और ठीक बनाता है, यह एक टीएलबी फ़ाइल उत्पन्न नहीं करता है। इसके बजाए, शीर्षक बॉक्स में त्रुटि आउटपुट बॉक्स में प्रिंट होती है।
मैं अन्य DLLs VS2005 में परियोजना के गुणों पर जाकर TLB फ़ाइलों का निर्माण करने की मिल गया है -> बिल्ड -> आउटपुट ->चेक "COM इंटरॉप के लिए रजिस्टर"। इसके अलावा मेरे पास है [असेंबली: ComVisible (true)] AssemblyInfo.cs में। यहाँ
using System;
using System.IO;
using System.Runtime.InteropServices;
using SymbolTable;
namespace ProblemLibrary
{
public class Foo
{
public Foo(string filename)
{
...
}
// method to read a text file into a SymbolTable
public SymbolTable BuildDataSet(string[] selected)
{
...
}
}
}
SymbolTable.dll का सार है:
यहाँ समस्या DLL के लिए स्रोत और DLL है कि यह एक वापसी प्रकार के लिए संदर्भ के सारांश है। इसमें रिटर्न प्रकार है जो ProblemLibrary का उपयोग करता है।
using System;
using System.Collections.Generic;
namespace SymbolTable
{
public class SymbolTable
{
readonly Dictionary<SymbolInfoStub, string> _symbols = new Dictionary<SymbolInfoStub, string>();
/*methods that interact with Dictionary snipped*/
}
}
आपको COM इंटरॉप की आवश्यकता क्यों है? मुझे वहां कोई भी कॉम नहीं दिख रहा है। क्या आप बाद में COM के माध्यम से सी # असेंबली तक पहुंचना चाहते हैं? – codeulike
हां, मुझे एक्सेल वीबीए में इस डीएलएल का उपयोग करने की आवश्यकता है। –