ايران ويج

نسخه‌ی کامل: ساخت ocx قابل استفاده در vb6
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6
COM یا Component Object Model یک مکانیسم شی گرایی تقریبا قدیمی هست که توسط مایکروسافت در سال 1993 ارائه شد . بیشترین هدف این تکنولوژی ، ایجاد دادن امکان ساخت اشیا بصورت داینامیک و تبادل و به اشتراک گذاریه قابلیت های اونها بین پروسس ها ، برنامه ها و حتی کامپیوتر های مختلف بود . همینطور DCOM و +COM هم نسخه های متفاوتی از اون بودند که بعدها ارائه شدن .
از اولین سیستم هایی که بر این مبنا ساخته شدند میشه همون مکانیسم OLE رو اشاره کرد . در زمان ارائه ویژوال استدیو 6 در سال 1998 مبحث ActiveX هم به این جمع اضافه شد .
برای مثال تمام او سیستم های آتوماسیون Office هم بر همین مبنا ساخته شده ( برنامه های پکیج آفیس همه به نوعی COM Server هستند و شما میتونید برنامه ای بنویسید که به عنوان COM client از قابلیت های اونها استفاده کنه )

ساختار درونی و برنامه نویسی سیستم های COM خیلی پیچیده بود و مشکلات عمده ای داشت برای همین مایکروسافت سیستم Net. رو ارائه کرد که تمام مشکلات موجود COM رو برطرف کرد ، برنامه نویسی رو خیلی ساده کرد و سیستم COM رو کنار گذاشت . البته همون طور که بهت گفتم هنوز پشتیبانی دو طرفه از اون رو در دات نت انجام میده یعنی شما میتونی در دات نت از اشیای COM استفاده کنی و بلعکس ولی ساخت اشیای COM در دات نت دیگه امکان پذیر نیست .
همون طور کامپوننت های COM به ocx یا ActiveX معروف بودند ، کامپوننت های دات نت به Assembly معروف هستند . مثلا یکی از مشکلات طراحی ActiveX این بود که با string های توی وی بی مشکل داشتند و اگر توی ++VC میخواستیم واسه وی بی کامپوننت بسازیم باید حواسمون رو به این مسئله میدادیم . اینجور مشکلات در سیستم یکپارچه دات نت و دنیای اسمبلی ها دیگه معنی نداره !!

کدهایی که توی محیط دات نت نوشته میشن کاملا کنترل شده هستند در یک سیستم مدیریت حافظه اتوماتیک با نام CLR اجرا میشن و بطور کل کدهای نوشته شده در دات نت رو Managed کد می گن . کدهایی که خارج از محیط CLR اجرابشن رو Unmanaged میگن مثلا کدی که در وی بی 6 نوشته میشه !
اینترفیس از مباحث COM هست ولی توی دات نت کاملا یه مفهوم دیگه داره !
سلام.
منظورم اینه که میخوام کامپوننتی که دات نت میسازم ظاهر گرافیکی هم داشته باشه. یعنی روی فرم نمایش داده بشه. مثل همون ocx ویبی. بعد بیارمش تو ویبی استفاده کنم. ولی این سورسی که گذاشتی خروجیش tlb هست. tlb که نمیتونه ظاهر گرافیکی داشته باشه. این مشکل رو چطور حل کنم؟
من خودم تا حالا همچین کاری انجام ندادم ولی اینهم شدنیه . لینک های زیر رو ببین :

http://blogs.msdn.com/calvin_hsia/archiv...65830.aspx
http://forums.microsoft.com/MSDN/ShowPos...2&SiteID=1
سلام.
اینارم دیدم ممد. اینا تو هیچ کدوم فایل dll دات نتشون قابل استفاده تو ویبی نیست. باید تبدیل شه به tlb و tlb هم که اینترفیس نیست. راهنمایی کن.
اگر کمی به من فرصت بدی میگردم راهش رو پیدا میکنم ، میام همین جا مینویسم
سلام.
ممد ممنون از کمکت. تونستم مشکلو با ویبی دات نت حل کنم. همون فایل tlb میتونه اینترفیس هم باشه. من فکر میکردم tlb رو میشه فقط به عنوان ریفرنس اد کرد ولی دیدم میشه به عنوان کامپوننت هم اد کرد. حالا یه مثال هم همین جا میذارم که کامپوننتی که با ویبی دات نت نوشته شده قابل استفاده در ویبی6 باشه.

ولی با C#.net نتونستم این کار رو بکنم. سی شارپ پیغام میده که این پروژه شامل هیچ تایپی نیست که بشه برای Com رجیسترش کرد. یه همچین پیغامی میده و اصلا فایل tlb رو نمیسازه.
اگه تونستی این مشکلو حل کن.
پس حالا که اینطوره کل کد وی بی و #C رو بگذار همینجا . من چک میکنم ببینم مشکل از کجاست !
سلام.
project مثالیه که با ویبی دات نت نوشتم. یه یوزر تو وین میسازه و تو گروه مورد نظر ادش میکنه. که این کامپوننت تو ویبی 6 هم قابل استفاده هست.
دومی هم مثال C# که گفتم چه اروری میده.
کافیه کد قدیمی رو به کد زیر تغییر بدی تا پروژه توی #C هم به راحتی کامپایل بشه :

کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Testttt
{

    [ClassInterface(ClassInterfaceType.None)]
    [Guid("8D0240AD-1BBE-4831-8214-39DD46A4A797")]
    [ComVisible(true)]
    public partial class testttt : UserControl
    {
        public testttt()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("D");
        }
    }
}
سلام.
با این کار بدون ارور کامپایل میشه ولی کامپوننت رو رجیستر نمیکنه. از تو ویبی تو لیست کامپوننت ها این کامپوننت مورد نظر رو نمیتونی پیدا کنی تا به پروژه اضافه کنی.
در مورد کدی که اضافه کردی و تغییراتی هم که دادی یه توضیح بدی ممنون میشم.
صفحه‌ها: 1 2 3 4 5 6