نمایش نتایج 1 تا 9 از 9

نام تاپیک: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

  1. #1
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    من دارم از طریق Automation برای AutoCad کد می نویسم. Cad میاد اشیاء رو بصورت OleVariant در اختیار میذاره. مشکل اینجاست که برنامه من قراره با اشیاء ایجاد شده توسط یه برنامه دیگه کار کنه، اون برنامه هم Documentی که مشخصات اشیائش رو توضیح بده منتشر نکرده. منم برای دسترسی به یه سری مشخصات خاص هر نام رایجی که به نظرم میرسید تست کردم ولی جواب نداد.
    حالا سوال اینجاست که آیا میشه در حین اجرا لیستی از تمام متدها و Property های پیاده سازی شده برای شیئی که داخل یه OleVarian هست رو بدست آورد؟

  2. #2

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    GetPropList روش جواب نمی ده؟

  3. #3
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    خیر، من که نتونستم ازش استفاده کنم.

  4. #4

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    تو دلفی ازش handle می شه گرفت؟
    یا اونم داستانیه؟

  5. #5
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    این اشیا، ویندوزی نیستن که Handle به اون صورت مد نظر شما داشته باشن، یه سری اشیای ترسیمی هستند مثل خط، دایره و ...

  6. #6

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    حالا سوال اینجاست که آیا میشه در حین اجرا لیستی از تمام متدها و Property های پیاده سازی شده برای شیئی که داخل یه OleVarian هست رو بدست آورد؟
    مسئله شما OleVariant نیست. وقتی از Automation استفاده می کنید، و یک شی برگشت داده میشه، این کار از طریق IDispatch صورت میگیره. در واقع شی مورد نظر شما به صورت یک IDsipatch در اون متغیر OleVariant برگشت داده شده. وقتی در زمان اجرا متدی را به این شی برگشتی نسبت میدید، از طریق اینترفیس IDispatch، نام این متد به IDispatch.GetIDsOfNames ارسال میشه، تا ID اون متد به دست بیاد. اگر متدی با اون نام برای اون شی وجود داشت، اون وقت IDispatch.Invoke برای اجرای اون متد خاص فراخوانی میشه. این میشه فراخوانی به صورت late-binding.

    حالا، اگر Automation Object مورد نظر شما Type Library ایی رو به شما ارائه کرده باشه، می تونید اون Type Library رو Import کنید، و در اون صورت، با cast کردن مقدار ذخیره شده در OleVariant به اینترفیس مورد نظر خودتون در اون Type Library، می تونید به صورت early-binding متدهای اون رو فراخوانی کنید یا به خصوصیاتش دسترسی داشته باشید.

    اگر به Type Library دسترسی ندارید، و مستنداتی هم برای استفاده از اون Automation Object وجود نداره، دقیقا نمیدونم که چیکار می تونید بکنید. فقط میدونم که IDispatch یک متد با نام GetTypeInfo داره، که اطلاعات مربوط به اون تایپ خاص رو برگشت میده. البته نمیدونم دقیقا به چه شکلی این اطلاعات برگشت داده میشه. شاید به صورت ITypeInfo برگشت داده میشه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    در واقع شی مورد نظر شما به صورت یک IDsipatch در اون متغیر OleVariant برگشت داده شده.
    علی آقا بازم ممنون، قضیه همین بود که یه مسیر اشتباه رو داشتم می رفتم که هرچی می گشتم چیزی پیدا نمی کردم.
    فقط میدونم که IDispatch یک متد با نام GetTypeInfo داره، که اطلاعات مربوط به اون تایپ خاص رو برگشت میده. البته نمیدونم دقیقا به چه شکلی این اطلاعات برگشت داده میشه. شاید به صورت ITypeInfo برگشت داده میشه.
    اینجا یکی همین مسئله رو پیاده سازی کرده:
    http://www.delphi3000.com/articles/article_2586.asp?SK=
    یه IDispatch میگیره و تمام Member ها شو تو یه StringList بر می گردونه.

    ولی مسئله ما که حل نشد، نمی دونم اون کثافت مرض دیتایی که می خوام رو کجا برده نگه داشته، الان با همین متد DocumentIDispatch که توی لینک بالا بود تمام اعضای شیئم رو بدست میارم ولی هیچ چیز جدیدی نسبت به اشیائ پیش فرض Cad ایجاد نشده. کم کم باید برم دنبال یه ارتفاع مناسب بگردم.

  8. #8

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    سلام.
    شما می تونید با استفاده از OLE Object Explorer، اقدام به Browse کردن DLL، OCX، TLB و بطور کلی کلیه Typelib ها کنید. اینطوری می تونید ببینید که Interface ها، Struct ها، CoClass ها و ... چگونه در اون COM Server تعریف شده اند و از اینجا به ارتباطات کلاس ها (البته به سختی) و پیاده سازی Interface ها و CLSID ها و ... پی ببرید.

    موفق باشید.

  9. #9
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    نقل قول: امکان بدست آوردن تمام Memberهای پیاده سازی شده برای یک OleVariant در حین اجرا؟

    اقدام به Browse کردن DLL، OCX، TLB و بطور کلی کلیه Typelib ها
    ممنون، نرم افزار جالبی بود، ولی توی لیستاش اون کلاس ها رو ندیدم. با این که اشیاء پیش فرض خود اتوکد لیست شده بود. متاسفانه اون نرم افزاری هم که باهاش کار می کنم هیچ DLL یا OCX یا ... در اختیار نذاشته و من هم چیزی پیدا نکردم. اگه داشت که با خود دلفی یا بقیه ابزار ها لودش می کردم.
    حالا یه سوال دیگه: ببینید اتوکد نرم افزار خیلی بازیه و راههای تعامل زیادی داره. حالا به نظر شما میشه مشخصات یه کلاس جدید رو به یه روشی مثلا از طریق یه فایل متنی به اوتوکد معرفی کرد و اون خودش بتونه بقیه کارها رو انجام بده یا یه همچین چیزی از اساس با ماهیت کلاس ها منافات داره و حتما یه TypeLibی، حالا در یکی از قالب های DLL یا OCX یا ...، این وسط باید تعریف شده باشه؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •