ورود

نسخه کامل مشاهده نسخه کامل : چگونه نوع مقدار بازگشتي تابع رو stdcall قرار بدم؟



roebuck
31-03-2011, 11:22
سلام و خسته نباشيد
سال نو مبارك..

من با c# يك class library براي ساخت dll ساختم .

حالا ميخوام نوع مقدار بازگشتي تابع رو stdcall قرار بدم..

چطور بايد اينكار رو انجام بدم؟

__stdcall‌ رو بايد بعد از نوع تابع بنويسم؟
از چه Using اي بايد استفاده كنم؟

ممنون ميشم سريعتر راهنماييم كنيد

_H2_
03-04-2011, 22:16
سلام
اگر قصد دارید از تابعتان در ASP.Net استفاده کنید، باید بدانید که معمولاً نیازی به این کار نیست.
و همچینین خیلی بهتر است که تمام توابع و بخش های برنامه شما از کد مدیریت شده باشد و از موارد فوق استفاده نکنید.

بحرحال نمونه قدیمی زیر شامل کدهای ++VC برای ساخت تابعی نمادین جهت جمع دو عدد و استفاده ان در VB.Net است.
ثابت کامپایلری WINAPI در کدهای فوق معادل فراخوانی stdcall می باشد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

roebuck
04-04-2011, 10:01
خير، از اين dll ميخوام در نرم افزار ديگه اي استفاده كنم(متاتريدر).

اين لينك رو پيدا كردم..اما مثل اينكه يه جايي بايد كدم رو از C# به C++ تبديل كنم كه كمي پيچيده هست برام.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما فكر ميكنم تنها راهش همين باشه،درسته؟

roebuck
06-04-2011, 11:32
براي تبديل اين كد از C# به C++ مشكل دارم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

با converter (دانلود كردم) كه تبديل ميكنم كلي خطا داره.
ممكنه راهنماييم كنيد؟

MosaferJade
06-04-2011, 17:21
یه سر به این صفحه بزنید شاید کمکتون کنه
البته من خودم هنوز استفاده نکردم ولی امیدوارم مشکلتون حل بشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

roebuck
19-04-2011, 11:16
یه سر به این صفحه بزنید شاید کمکتون کنه
البته من خودم هنوز استفاده نکردم ولی امیدوارم مشکلتون حل بشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

از اين converter ها استفاده كردم،اما درست تبديل نميكنند و در syntax خطا داره.

اين خط كد كه به زبان c# هست را ميتونيد به c++‌تبديل كنيد؟


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
22-04-2011, 23:08
سلام


اين خط كد كه به زبان c# هست را ميتونيد به c++‌تبديل كنيد؟
byte[] initVectorBytes = Encoding.ASCII.GetBytes("laksjdhfgmznxbcv");

این خط اصلاً نیازی به تبدیل ندارد!
متغییر char در ++C تک بایتی و اسکی است و درنتیجه همین char معادل C#-byte هم است.
یعنی اشاره گر به یک نوشته اسکی در ++C نوع *char است و اشاره گر به یک ساختار باینری هم *char است، پس اصلاً تبدیل معنی ندارد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

roebuck
26-04-2011, 12:46
ممنون از شما.

متاسفانه در تك تك خط هاي اين كد كه به C++ تبديل كردم(البته با converter) با خطا روبرو شدم..ممنون ميشم كمكم كنيد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

roebuck
26-04-2011, 13:30
ممنون از شما.

كد را به همان صورتي كه گفتيد نوشتم و در آن خط و خط مشابه بعدي اش مشكل حل شد..

در اين خط چطور بايد به صورت C++‌بنويسم؟:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمتاسفانه در تك تك خط هاي اين كد كه به C++ تبديل كردم(البته با converter) با خطا روبرو شدم..ممنون ميشم كمكم كنيد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
29-04-2011, 19:07
سلام
کدهای معمول شما قابل تبدیل هستند(در واقع قابل نوشتن مجدد هستند) ...
ولی مشکل فقط یک کست بین مقادیر نیست.
در کد فوق، از کلاس RijndaelManaged در دات نت استفاده شده.
یک دستور و یک تابع ساده را شاید بتوان مجدد به زبان دیگر نوشت.
ولی کلاس RijndaelManaged جزء امکانات فضای Framework است، و لزوماً سایر زبان ها همین کلاس را با همین خواص و مشخصات ندارند.

شما نمیتوانید همینطوری یک کد #C که از امکانات متعدد آماده فضای Framework استفاده میکند را فوراً به زبان غیر دات نتی دیگری بنویسید.
در فضای Framework هزاران کلاس آماده وجود دارد که پس از استفاده از آنها کدشما وابسته به حضور آن خواهد بود.

مثل کد ++C میماند که دستورات و توابع عادی آن به راحتی به زبانهای دیگر تبدیل میشود و اگر در برنامه از include خاصی استفاده شده باشد، میتواند تبدیل کد را بسیار مشکل و نا ممکن است.

در واقع include ها در ++C و کلاسهای Framework اجزای آماده ای هستند که بعضاً سایرین نوشته اند و ما در برنامه ها از آنها استفاده میکنیم و در زبان و محیط دیگر لزوماً با همین شکل و قالب وجود ندارند.

roebuck
30-04-2011, 11:17
يعني براي كلاس RijndaelManaged در c#, معادل يا كدي در c++ وجود ندارد؟

در چند پست قبل گفته بودم كه براي ساخت dll به منظور استفاده در نرم افزار متاتريدر با توجه به لينك زير مجبورم كه كدم رو به c++ تبديل كنم..


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پس بايد چيكار كنم؟ شما راه حلي نداريد؟

_H2_
07-05-2011, 23:36
سلام

يعني براي كلاس RijndaelManaged در c#, معادل يا كدي در c++ وجود ندارد؟
بحرحال معادل که دارد ولی کد مشخص و یک خطی نیست، نیاز به تحقیق و بررسی و یافتن یک کد مناسب داشته باشد.
(که خودش شاید ده ها و صدها خط کد داشته باشد و یا dll و کتابخانه آماده ای پیدا شود ...)


پس بايد چيكار كنم؟ شما راه حلي نداريد؟
زبان برنامه نویسی VC++.Net میتواند هم از کتابخانه Framework استفاده کند و هم منابع(کدی) خود را به صورت توابع صادر کند.
من تازه لینک شما را دیدم، در لینکی که خودتان هم داده بودید به وضوح از زبان VC++.Net استفاده شده است با وجودی که با ان سمپل ساده ای که موجود بوده، امکان استفاده از ++VC هم (نسخه غیر مدیریت شده) وجود داشته.
درنتیجه هم از منظر منطق برنامه نویسی و هم شواهدی که در لینک خودتان است، امکان استفاده از VC++.Net وجود دارد.
فقط بدیهی است که برای کارکردن فایل نهایی نیاز به نصب نسخه Framework در رایانه مقصد است که البته در سیستم عامل های ویستا و سون به صورت پیش فرض نصب است.
مثلاً نمونه تبدیل شده کدقبلی به VC++.Net میتواند به سادگی چیزی شبیه این باشد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که در نهایت برای صدور راحت تر برای استفاده در سایر نرم افزارها شاید نیاز باشد مقادیر ورودی و خروجی غیر struct ای (مثل String) به نوع های سازگارتر تبدیل شوند.

roebuck
22-05-2011, 18:51
ممنون
2 تا خطا داد:

1- روي اين خط:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

چطور ميتونم اين خط رو طوري بنويسم كه از نوع Stdcall‌ برگردونه؟
به عنوان مثال مثل اين:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

2- و روي اين خط:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
04-06-2011, 10:20
سلام
به وضوح شما از کامپایلر مناسب استفاده نکرده اید.
کد فوق مختص مجموعه VS2010 یا VS2008 است و باید پروژه ++VC از نوع CLR انتخاب شود تا کدهای فوق معنی داشته باشد و قابل کامپایل باشد.

roebuck
12-06-2011, 10:07
به وضوح شما از کامپایلر مناسب استفاده نکرده اید.
کد فوق مختص مجموعه VS2010 یا VS2008 است و باید پروژه ++VC از نوع CLR انتخاب شود تا کدهای فوق معنی داشته باشد و قابل کامپایل باشد.

من از VS2005‌ استفاده ميكنم .
حالا بايد چيكار كنم؟ در همين ورژن نميتونم از كد مشابهي استفاده كنم؟:41:

_H2_
01-07-2011, 23:09
سلام
میبخشید طبق معمول دیر شده! :11:

در خصوص VC++2005 باید عرض کنم که سینتکس آن با VC++2008 و VC++2010 تفاوت های زیادی داشته، من هم در حال حاضر فقط آخرین نسخه VC++2010 را نصب دارم، فقط میتوانم به نوعی چشم بسته و بدون امتحان کد زیر را برای VC++2005 پیشنهاد کنم.

(
لازم به ذکر است که در این صورت هم شما باید تنظیم clr/ را در ++VC فعال کنید.
در واقع شما نیاز به تولید dll مد Mixed در ++VC دارید که موارد خاصی باید در ان رعایت شود.
اطلاعات کامل:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید