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

نام تاپیک: تبدیل رشته ها

  1. #1
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372

    Tick تبدیل رشته ها

    با سلام و تبریک سال جدید خدمت دوستان :

    در مورد تبدیل رشته ها چند تا سوال دارم :

    میخواستم بدونم فرق string و CString و System::string دقیقا چیه ؟(تا جایی که اطلاع دارم CString برای mfc و string داده ای در دات نت هستش . System::string رو هم نمی دونم
    حالا میخواستم در مورد تبدیل در مورد این نوعها واسم توضیح بدید :
    من تابعی دارم که آرگومانهاش بعد از باز کردن پرانتز در tooltip ی به صورت زیر نمایش داده میشه :

     
    System::object ^)نام تابعsystem::string ^ %,int %)
    بعد از تحقیق دوستان برای استفاده از این تابع راه حلی رو به صورت زیر به من پیشنهاد دادن :

     
    System::String^x = gcnew System::String(CString داده از نوع );

    در هر حالx متغیری برای نوع مورد نیاز من هست
    اما در نهایت با این error مواجه میشم :

    cannot convert parameter 1 from 'System::Object ^' to '__const_String_handle'

    ممکنه راهنمایی بدید
    با تشکر

  2. #2
    به این صورت بنویسید ، نباید مشکلی باشد:

    CString str = _T("test");

    String ^ strE = gcnew String( str );

  3. #3
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    باید بگم بدتر شد!!

    فرض کنید str قراره از یک edit box مقدار بگیره
    با این کدها مشکلات زیر بوجود اومدند :

    String' : undeclared identifier
    error C2061: syntax error : identifier 'String'

    همونطوری که گفتم و در بالا آوردم پارامتر ورودی تابع از نوع system::string هست

    من این تبدیل رو برای استفاده در تابع میخوام.
    تشکر

  4. #4
    منظور از قطعه کد قبلی این بود که آدرس رشته ارسال شود ،ضمنا باید فضای System را در ابتدا تعریف کنید به این صورت:

    using namespace System;
    یا به همان شکل کد خودتان با System::String

    من این تبدیل رو برای استفاده در تابع میخوام.
    تبدیل خاصی نمی خواهد ، هر رشته ای که دارید و از هر کجا که می خواهید ( مثلا اشاره گری به یک رشته از نوع char و یا CString مخصوص MFC) آن را در متغیر رشته ای خود کپی کنید و سپس همان قطعه کد را استفاده کنید تا به System::String تبدیل کند. شما کد خود را کامل ننوشتید تا به شما بگوییم چه اشتباهی کرده اید فقط نوشتید داده از نوع CString .
    ضمنا String با strting که s کوچک هست فرق می کنند ، دقت کنید.

    توابع دیگری برای تبدیلات وجود دارد:
    http://msdn2.microsoft.com/en-us/library/ms235631(VS.80).aspx
    PtrToStringChars

  5. #5
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    در لینکی که دادید هم دقیقا داره روشی رو که گفتم رو انجام میده یعنی برای CString به System::string داره اینطور کاری رو انجام میده :

    // Convert to a System::String
    String ^systemstring = gcnew String(orig);
    systemstring += " (System::String)";
    Console::WriteLine("{0}", systemstring);
    delete systemstring;

    ولی مشکل من از اینجا شروع شد :
    من دارم از همون dll معروف shami استفاده می کنم تمام توابعش رو که البته یک آرگومان ورودی داشتند رو با همون کدی که دادم به راحتی باهاشون کار می کنم اما یه تابع با دو آرگومان به نام ShamsiIncrease در این dll وجود داره که داره مشکل ساز میشه من به این صورت دارم باهاش کار میکنم :

    using namespace ShamsiDLL;



    UpdateData();
    ClassShamsiClass cls;
    System::String^ strDate = gcnew System::String(Edit1);
    hasel = cls.ShamsiIncrease(strDate,num);
    UpdateData(FALSE);


    Edit1متغیر یک edit box از نوع CString و strDateخروجی برای استفاده در تابع هست
    و hasel برای چاپ جواب در خروجی هست . numهم عددی است که قرار است از تاریخ مورد نظر ما کم کند
    نمیدونم چرا در این تابع به error زیر میرسه ؟

    cstringt.h(1098) : error C2664: 'PtrToStringChars' : cannot convert parameter 1 from 'System::Object ^' to '__const_String_handle'

    see reference to function template instantiation 'ATL::CStringT<BaseType,StringTraits>::CStringT<Sy stem::Object>(SystemString ^)' being

  6. #6
    لطفا سوال خود را از ابتدا به صورت کامل مطرح کنید ؛ چون پس از چندین ارسال معلوم می شود که کلا هدف شما چیز دیگری بوده است، لطفا در هنگام مطرح کردن سوال خود دقت بیشتری کنید.

    روش System::String و این تبدیل از نوع دات نت هست ، dll مذکور شما یک کتابخانه COM هست و نمونه هایی که در آن dll با string وجود دارد برای زبان VB مثال زده شده است نه ++C ، و ربطی به دات نت ندارد ، چرا از این شیوه تبدیل استفاده می کنید؟

    شما در هر زبانی که هستید با رشته های همان زبان باید کار کنید مثلا تا آنجا که اطلاع دارم برای پارامتر اول ShamsiIncrease نیاز به استفاده از یک رشته یه صورت wide هست

  7. #7
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    لطفا سوال خود را از ابتدا به صورت کامل مطرح کنید ؛ چون پس از چندین ارسال معلوم می شود که کلا هدف شما چیز دیگری بوده است، لطفا در هنگام مطرح کردن سوال خود دقت بیشتری کنید.
    تصور من این بود که اشکال در نوع تبدیل است و چون توابع دیگر این dll رو به همون روشی که گفتم صدا میزدم اون رو کامل مطرح نکردم چون احساس میکردم با یک تبدیل ساده مشکل برطرف میشه

    در هر حال مشکل فکر میکنم در اینجاست که خروجی تابعی که در موردش بحث شد از نوع داده ای object هست و اشتباه من این بود که از نوع CString برای خروجی استفاده میکردم
    اما در هر حال من از روش زیر استفاده کردم (با اینکه جواب داد خیلی دوست دارم نظرتون رو راجع به این تبدیل بدونم )

    UpdateData();
    ClassShamsiClass cls;
    String^ y = gcnew String(date1);
    System::Object^ o;
    o=cls.ShamsiIncrease(y ,num);
    String^ ss = o->ToString();
    hasel= ss;
    UpdateData(FALSE);

    اگه پیشنهادی دارید خوشحال میشم روش کار کنم

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

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