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

نام تاپیک: SAFEARRAY چیست؟

  1. #1

    SAFEARRAY چیست؟

    SAFEARRAY چیست؟ چطور مقداری درش ذخیره میشه؟
    و چطور مقادیرش رو بخونیم ...؟
    من کد زیر رو دارم که متد صدا زده شده در یک SAFEARRAY ریخته میشه چطور میتونم مقادیرش رو بخونم؟
    (سرچ کردم نتیجه نداد)


    SAFEARRAY* sa = CardFuncs->testStringArray();


    توضیح بیشتر: تابع testStringArray در dll ی به زبان سی شارپ نوشته شده و مقدار بازگشی متد StringArray تعریف شده که در C++‎ مقدار SAFEARRAY بر می گرداند.

  2. #2

    نقل قول: SAFEARRAY چیست؟

    خوب کسی که جواب نداد خودم جواب میدم (این تالار یک اقای موسوی رو داره که بعضی وقتا جواب میده و کلاخیلی خلوته ...)
    این همه منبع کامل واسه سی شارپ داریم اما وقتی میخوام درمورد سی یا سی پلاس پلاس مطلبی پیدا کنم جونم بالا می یاد تا یک نمونه کد گیر بیارم و بفهمم!!!! مثلا درباره همین SAFEARRAY مطلب زیاد بود ولی من لینک زیر رو متوجه شدم و تونستم ازش جواب بگیرم .... پیشنهاد می کنم این لینک رو مطالعه کنید.
    http://www.codeproject.com/KB/atl/safearray_macro.aspx
    کدی که برای برنامم نوشتم اینه:

    LONG lstart, lend;
    SAFEARRAY* sa = CardFuncs->testStringArray();
    LONG idx = -1;
    LONG nPos;
    HRESULT hr2;
    BSTR* pbstr;

    hr2 = SafeArrayAccessData(sa,(void HUGEP**)&pbstr);
    if(SUCCEEDED(hr2))
    {
    for(idx=lstart; idx <= lend; idx++)
    {
    CComBSTR s;
    s = pbstr[idx];
    .
    .
    .
    // s now contains the item at position idx in the array
    // ...
    }
    hr2 = SafeArrayUnaccessData(sa);
    if(FAILED(hr2)) return hr2;
    }
    else
    return hr2;



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

  3. #3

    نقل قول: SAFEARRAY چیست؟

    سلام.
    با فرض به اینکه مقدار بازگشتی تابع شما آرایه ای از BSTR ها باشه، می تونید با استفاده از کلاس CComSafeArray (که در atlsafe.h تعریف شده) بدین شکل عمل کنید:


    CComSafeArray<BSTR> safeArray(res);
    for(int i = 0; i < safeArray.GetCount(0); i++)
    {
    CComBSTR bstr(safeArray[i]);
    }


    بدین ترتیب دیگه نیازی به مدیریت دسترسی به SAFEARRAY نیز ندارید، چون CComSafeArray کنترل های لازم رو برای شما انجام میده.

    موفق باشید.

    پاورقی: در کد فوق، فرض کردم مقدار بازگشتی آرایه ای یک بعدی هستش و نتیجه اش در متغیر res ذخیره شده!

    Update: سوال اصلی رو فراموش کردم جواب بدم. SAFEARRAY چیه؟ Structure ای برای نقل و انتقال آرایه ای از Data Type های از پیش تعیین شده که طول آرایه نیز در درون Structure نگهداری میشه. مورد استفاده اش هم Marshaling داده ها در OLE Automation و ... هستش.

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

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