Makale numarası: 828736 - Son Gözden Geçirme: 19 Nisan 2007 Perşembe - Gözden geçirme: 2.6

Yönetilen bir DLL DOSYASı, Visual Studio 2005 veya Visual Studio. NET'i yerel Visual C++ kodu çağırmanıza nasıl kullanılır

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, yönetilen bir DLL yerel C++ kod nasıl açıklar. Bunu yapmak için <a0></a0>, Microsoft Visual C# .NET veya Microsoft Visual C# 2005 kullanarak basit bir yönetilen dll DOSYASı oluşturun ve sonra da bu yönetilen bir DLL yerel C++ kod çağırın.

Gereksinimler

Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Bileşen Nesne Modeli (COM) istemcilerinin yazma
  • Microsoft .NET Framework COM birlikte çalışabilirlik

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Visual C# .NET veya Visual C# 2005
  • Visual C++ .NET veya Visual C++ 2005

Yönetilen bir DLL DOSYASı yazma

Iki sayı eklemek ve sonucu geri dönmek için genel bir yöntem olan basit bir yönetilen DLL oluşturmak için aşağıdaki adımları izleyin:
  1. Microsoft Visual Studio 2005 ya da Microsoft Visual Studio. NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın. <a0>New Project</a0> iletişim kutusunu açar.
  3. Project Types altında Visual C# Projects ' ı tıklatın.

    Not Visual Studio 2005'te, Visual C#Project Types altında'ni tıklatın.
  4. Şablonları altında tıklatın sınıf kitaplığı.
  5. Adı metin kutusuna, sManagedDLL yazın ve Tamam ' ı tıklatın.
  6. Class1.cs dosyasının kod görünümünde açın.
  7. Iki sayı eklemek için bir yöntem olan ortak bir arabirim bildirmek için <a0></a0>, ınterface bildiriminde Class1.cs file:
    // Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };
  8. Bu bir ortak arabirim bir sınıfta uygulamak için <a0></a0>, Class1.cs file:
    // Interface implementation.
    public class ManagedClass:ICalculator
    {
        public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
    }
  9. Başlat ' ı tıklatın ve ardından Program ' ın üzerine gelin.
  10. Visual Studio .NET 2003 kullanıyorsanız, Microsoft Visual Studio .NET 2003 ' e gelin ve sonra Visual Studio .NET araçları ' nın üzerine gelin. Visual Studio .NET 2002 kullanıyorsanız, Microsoft Visual Studio.NET ' i işaretleyin ve sonra Visual Studio .NET araçları ' nın üzerine gelin. Visual Studio 2005 kullanıyorsanız, Microsoft Visual Studio 2005 ' e gelin ve sonra Visual Studio 2005 araçları ' nın üzerine gelin.
  11. Visual Studio .NET 2003 kullanıyorsanız, Visual Studio. NET'in bir komut istemini açmak için Visual Studio .NET 2003 komut istemi ' ni tıklatın. Visual Studio .NET 2002 kullanıyorsanız, bir Visual Studio .NET'i açmak için Visual Studio .NET komut istemi ' ni tıklatın komut istemini. Visual Studio 2005 kullanıyorsanız, Visual Studio 2005 komut istemini açmak için Visual Studio 2005 komut iste ' yi tıklatın.
  12. Güçlü bir sınıf Kitaplığınızın adını oluşturmak için <a0></a0>, Visual Studio. NET'in komut isteminde aşağıdaki komutu yazın:
    sn.exe MyKeyFile.SNK -k
  13. MyKeyFile.SNK dosyayı proje klasörünüze kopyalayın.
  14. Solution Explorer'da dosyayı açmaya AssemblyInfo.cs dosyasını çift tıklatın.
  15. AssemblyInfo.cs kod aşağıdaki satırları yerine dosya
    [assembly: ComVisible(false)]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    aşağıdaki.
    [assembly: ComVisible(true)] 
    [assembly: AssemblyDelaySign(false)] 
    [assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
  16. Yönetilen dll DOSYASıNı oluşturmak için CTRL + ÜST KRKT + K tuşlarına basın.

COM veya yerel C++ ile kullanım için yönetilen DLL kaydettirin.

COM veya yerel C++ yönetilen DLL kullanmak için <a0></a0>, Windows kayıt defterinde, DLL dosyasının derleme bilgileri kaydetmeniz gerekir. Bunu yapmak için şu adımları izleyin:
  1. Başlat ' ı tıklatın ve ardından Program ' ın üzerine gelin.
  2. Visual Studio .NET 2003 kullanıyorsanız, Microsoft Visual Studio .NET 2003 ' e gelin ve sonra Visual Studio .NET araçları ' nın üzerine gelin. Visual Studio .NET 2002 kullanıyorsanız, Microsoft Visual Studio.NET ' i işaretleyin ve sonra Visual Studio .NET araçları ' nın üzerine gelin. Visual Studio 2005 kullanıyorsanız, Microsoft Visual Studio 2005 ' e gelin ve sonra Visual Studio 2005 araçları ' nın üzerine gelin.
  3. Visual Studio .NET 2003 kullanıyorsanız, Visual Studio. NET'in bir komut istemini açmak için Visual Studio .NET 2003 komut istemi ' ni tıklatın. Visual Studio .NET 2002 kullanıyorsanız, bir Visual Studio .NET'i açmak için Visual Studio .NET komut istemi ' ni tıklatın komut istemini. Visual Studio 2005 kullanıyorsanız, Visual Studio 2005 komut istemini açmak için Visual Studio 2005 komut iste ' yi tıklatın.
  4. Visual Studio .NET veya Visual Studio 2005 komut isteminde, yönetilen bir DLL dosyanızın bulunduğu dizinin dizin yolunu değiştirin.
  5. Windows kayıt defterinde, yönetilen bir DLL dosyasının derleme bilgileri kaydetmek ve karşılık gelen bir tür kitaplığı oluşturmak için Visual Studio. NET'in komut isteminde aşağıdaki komutu çalıştırın:
    RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb / codebase

Yönetilen DLL yerel C++ kod alanından arayın...

Oluşturduğunuz yerel C++ yönetilen DLL aranacak kodu için şu adımları izleyin:
  1. Visual Studio .NET veya Visual Studio 2005'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Visual C++ .NET 2003 kullanıyorsanız, Visual C++ ProjectsProject Types altında tıklatın ve Win32 Konsolu'nu Projectşablonları altında tıklatın. Visual C++ .NET 2002 kullanıyorsanız, Visual C++ ProjectsProject Types altında tıklatın ve Win32 Projectşablonları altında tıklatın. Visual C++ 2005 kullanıyorsanız, Visual C++ altında Project Types ' tıklatın sonra Win32 Projectşablonları altında
  4. Adı metin kutusuna, CPPClient yazın ve Tamam ' ı tıklatın.
  5. Visual C++ .NET 2003 veya Visual C++ 2005 kullanıyorsanız, son ' u tıklatın. Visual C++ .NET 2002 kullanıyorsanız, Uygulama ayarları ' nı tıklatın, Console Application ' ı tıklatın ve sonra da <a2>son</a2>'u tıklatın.
  6. CPPClient.cpp dosyasının kod görünümünde açın.
  7. Tür kitaplığı RegAsm.exe oluşturduğu almak için <a0></a0>, tür kitaplığı alma CPPClient.cpp file:
    // Import the type library.
    #import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
    yolunu bilgisayarınızdaki bu yoldan farklıysa, tür kitaplığı yolu değiştirin.
  8. Kullanılacak ad bildirmek için <a0></a0>, CPPClient.cpp dosyasına aşağıdaki kodu ekleyin:
    using namespace ManagedDLL;
  9. Yönetilen DLL aramak için <a0></a0>, _tmain çalışması için aşağıdaki kodu ekleyin:
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);
    
    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));
    
    long lResult = 0;
    
    // Call the Add method.
    pICalc->Add(5, 10, &lResult);
    
    wprintf(L"The result is %d", lResult);
    
    // Uninitialize COM.
    CoUninitialize();
    return 0;
  10. Uygulamayı çalıştırmak için CTRL + F5 tuşuna basın.

Kod tamamlamak listesi

Yönetilen DLL
// Class1.cs
// A simple managed DLL that contains a method to add two numbers.
using System;

namespace ManagedDLL
{
	// Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };

    // Interface implementation.
	public class ManagedClass:ICalculator
	{
       public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
	}
}
C++ istemci
// CPPClient.cpp: Defines the entry point for the console application.
// C++ client that calls a managed DLL.

#include "stdafx.h"
#include "tchar.h"
// Import the type library.

#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));

    long lResult = 0;

    // Call the Add method.
    pICalc->Add(5, 10, &lResult);

    wprintf(L"The result is %d\n", lResult);


    // Uninitialize COM.
    CoUninitialize();
    return 0;
}
Not common language runtime eklemeniz gerekir, derleyici seçeneği desteği (/ clr:oldSyntax) başarıyla bu kod örneğini derlemek için Visual C++ 2005'te. Bunu yapmak için şu adımları izleyin:
  1. Project ' i tıklatın ve sonra ProjeAdı özellikler ' i tıklatın.

    NotProjeAdı projenin adını temsil eder.
  2. Yapılandırma özellikleri ' ni genişletin ve sonra Genel ' i tıklatın.
  3. Seçmek için tıklatın ortak dil çalışma zamanı modülü ve Destek, eski sözdizimi (/ clr:oldSyntax)Common Language Runtime desteği proje ayarını sağ bölmedeki Uygula ' yı tıklatın ve sonra Tamam ' ı tıklatın.
Ortak dil çalıştırma hakkında daha fazla bilgi için destek derleyici seçenekleri, aşağıdaki Microsoft Web sitesini ziyaret edin:
/CLR (ortak dil çalışma zamanı derleme)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)

Referanslar

.NET Framework açıklamanızı hakkında daha fazla bilgi için COM bileşenleri, aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Anahtar Kelimeler: 
kbmt kbmanaged kbcominterop kbhowtomaster KB828736 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:828736  (http://support.microsoft.com/kb/828736/en-us/ )