گفتگو هایی در باب سی شارپ

the_king

مدیرکل انجمن
سلام
ممنون استاد علی
عیدتون مبارک باشه
میگم من در کمپوننت Codejock Xtreme Suite Pro ActiveX 13.4.0 (که خودش شامل چندین کمپوننت هست) ، هر قسمت از این ها رو خواستم با استفاده از مثال اش (که بصورت آماده موقع نصب این کمپوننت ، توی پوشه ی نصب اش مثال ها ریخته میشه) استفاده کنم ، گفت که کلاس کمپوننت در رجیستری ثبت نشد. حالا 2 تا سئوال :
اول اینکه من وقتی توی سی شارپ خواستم از کمپوننت اتوات استفاده کنم (فایل dll مربوط به نسخه ی سی شارپ موسوم به assembely.dll شو) ، ازم نخواست که مثل این ، اول تی رجیستری ثبت کنم . نمیدونم شاید توی همون فایل سی شارپ ، در متد سازنده اش ، خودش اتوماتیک ثبت میکرد) . این حدسم درسته؟ اگه نه پس چرا کمپوننت اتوات لازم به ثبت کردن در رجیستری نداشت (با نسخه ی سی شارپ اش)
و دوم اینکه اگه بخوام با استفاده از سی شارپ ، یه کمپوننت ای رو در رجیستری ثبت کنم با چه متد یا کلاسی باید کار کنم؟
ممنون
سال نو برای شما هم مبارک باشه.
اصولا هیچ ActiveX ای همینطوری خود به خود Register نمیشه، یا از اول توی ویندوز بوده یا توسط Setup ای Register شده یا برنامه ای که ازش استفاده می کرده اول Register اش کرده.
در ضمن در مواردی با نگه داشتن فایل oca موقتی که ساخته میشه در کنار فایل ActiveX و یا با اضافه کردن یک فایل manifest میشه این روال نصب در Registry رو غیر ضروری کرد.
رجوع شود به :
استفاده از dll بدون رجیستر کردن انها

ActiveX ها رو یا مستقیما با regsvr32 در Registry نصب می کنند یا در یک Setup قرار می دهند که اینکار رو با واسطه انجام بده.
در ویندوز های 64 بیتی دو تا regsvr32 هست، c:\Windows\SysWOW64\regsvr32.exe و c:\Windows\System32\regsvr32.exe که اولی برای سازگاری با نرم افزار های 32 بیتی ئه و ممکنه دومی با همه ActiveX ها درست کار نکنه. وقتی مسیر فایل ActiveX رو به عنوان پارامتر به regsvr32 بدهید ثبت اش می کنه، اگه سوئیچ u/ رو اضافه کنید از Registry حذف اش می کنه. اگه سوئیچ s/ رو اضافه کنید مخفیانه و بدون پیغام ثبت اش می کنه.
مثلا "C:\Windows\SysWOW64\regsvr32.exe /s "D:\My Active\ac.ocx فایل ac.ocx رو بدون پیغام ثبت می کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، این پروژه چرا موقع ساختن (نه بصورت عادی و توی کمپایلر . فقط موقع ساختن) ارور میده؟ پروژه رو پیوست کردم
ممنون
 

پیوست ها

  • ClassLibrary1.rar
    515.2 کیلوبایت · بازدیدها: 1

the_king

مدیرکل انجمن
سلام
استاد علی ، این پروژه چرا موقع ساختن (نه بصورت عادی و توی کمپایلر . فقط موقع ساختن) ارور میده؟ پروژه رو پیوست کردم
ممنون
ظاهرا مربوط به package استفاده شده است، package از قبل کامپایل شده، کد نیست که بخواد کامپایل بشه، به همین دلیل اگه کد خودتون از لحاظ نحوی ایرادی نداشته باشه موقع کامپایل خطا نمیده.
package یا موقع ساختن فایل اجرایی روی روال ساختن اش تاثیر میذاره و یا صرفا موقع ساختن فایل اجرایی بهش لینک داده میشه. به همین دلیل اگه خطایی ناشی از عدم دسترسی یا اطلاعات نادرست package باشه، موقع ساختن فایل اجرایی مشخص میشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ظاهرا مربوط به package استفاده شده است، package از قبل کامپایل شده، کد نیست که بخواد کامپایل بشه، به همین دلیل اگه کد خودتون از لحاظ نحوی ایرادی نداشته باشه موقع کامپایل خطا نمیده.
package یا موقع ساختن فایل اجرایی روی روال ساختن اش تاثیر میذاره و یا صرفا موقع ساختن فایل اجرایی بهش لینک داده میشه. به همین دلیل اگه خطایی ناشی از عدم دسترسی یا اطلاعات نادرست package باشه، موقع ساختن فایل اجرایی مشخص میشه.

سلام
ممنون استاد علی
من دقیق متوجه نشدم
کجای پکیج ایراد داره؟ من طبق روال عادی ، دستور Install-Package UnmanagedExports رو توی پنجره ی nuget زدم و دانلود کرد و گفت موفقیت آمیز بود!
من الان باید چی کار کنم؟
نسخه ی ویژال استودیو ام هم 2017 هست
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آو
استاد علی ، انگار نسخه ی دات نت رو روی 4.6.2 (آخرین نسخه) میذارم این جور میشه . به 4.5.2 تغییر میدم ، درست میشه !
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
به 4.5.2 تغییر میدم ، درست میشه !در این صورت توی پنل output پیام موفقیت آمیز میده ولی بازم در پنل error list پیام ارور رو میده ولی در نهایت انگارز درست کار میکنه!
 

the_king

مدیرکل انجمن
به 4.5.2 تغییر میدم ، درست میشه !در این صورت توی پنل output پیام موفقیت آمیز میده ولی بازم در پنل error list پیام ارور رو میده ولی در نهایت انگارز درست کار میکنه!
Package هم میتونه مشکل ناسازگاری با نسخه ویژوال استدیو داشته باشه و هم مشکل ناسازگاری با نسخه Framework و هم باگ در کدش.
هر Package ای مشکلات و شرایط سازگاری خودشو داره، اگه ایرادی هم داشته باشه بجزUpdate کردنش کاری نمیشه کرد، خودتون نمی توانید رفع اش کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
استاد علی ، درباره ی قضیه ی استفاده از کمپوننت Codejock.Controls.v13.4.0.Demo.ocx ، فقط یه مثال کوچیک میزنین که کار کنه؟ مثلا یه دکمه ای از این کمپوننت رو به پروژه اضافه کنه تا مراحل ثبت و اضافه کردن رو یاد بگیرم؟
 

the_king

مدیرکل انجمن
ممنون
استاد علی ، درباره ی قضیه ی استفاده از کمپوننت Codejock.Controls.v13.4.0.Demo.ocx ، فقط یه مثال کوچیک میزنین که کار کنه؟ مثلا یه دکمه ای از این کمپوننت رو به پروژه اضافه کنه تا مراحل ثبت و اضافه کردن رو یاد بگیرم؟
اولا حتما تنظیم Platform Target رو در Properties پروژه تون بخش Build بذارید روی x86 چون ActiveX ئه 32 بیتی ئه و همیشه باید 32 بیتی باهاش کار بشه و نمیتونه روی سیستم عامل های 64 بیتی با مدل حافظه 64 بیتی کار کنه. ثانیا در Toolbox ویژوال استدیو در پروژه تون ActiveX اش رو از بخش COM بصورت Browse انتخاب می کنید و در مجموعه کنترل های Xtreme موارد دلخواه رو تیک می زنید و بعد از توی Toolbox برمیدارید و روی فرم قرار می دهید. ثالثا فراموش نمی کنید که Demo ئه و قرار نیست دائمی کار کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اولا حتما تنظیم Platform Target رو در Properties پروژه تون بخش Build بذارید روی x86 چون ActiveX ئه 32 بیتی ئه و همیشه باید 32 بیتی باهاش کار بشه و نمیتونه روی سیستم عامل های 64 بیتی با مدل حافظه 64 بیتی کار کنه. ثانیا در Toolbox ویژوال استدیو در پروژه تون ActiveX اش رو از بخش COM بصورت Browse انتخاب می کنید و در مجموعه کنترل های Xtreme موارد دلخواه رو تیک می زنید و بعد از توی Toolbox برمیدارید و روی فرم قرار می دهید. ثالثا فراموش نمی کنید که Demo ئه و قرار نیست دائمی کار کنه.

ممنون استاد علی :rose:
اه چقدر راحته
پس سری قبل شما میگفتین کمپوننت باید در رجیستری ثبت بشه !
در واقع من قشنگ متوجه نشدم . در چه صورت کمپوننت ها باید ثبت بشن و در چه صورت خودمون از پنجره ی toolbox باید اضافه کنیم؟ کلا متوجه ی انواع کمپوننت ها و نحوه های مختلف کار کردن باهاشون نشدم
مثلا کمپوننت اتوات رو وقتی میخوایم استفاده کنیم ، همونطور که گفتم ، نیازی به رجیستر کردن نداره و نمیدونم که توی متد سازنده اش این کار رو میکنه یا نه .
همه ی کمپوننت های ویژال و بصری (کنترلی) رو اگه بخوایم استفاده کنیم ، باید در قسمت toolbox خودمون (با browse>com) اضافه کنیم؟ کنترل های غیر بصری این کار رو لازم ندارن؟ واسه همینه کمپوننت های wmp و این codejock ها رو به این روش اضافه میکنیم؟ اگه این طوره که هیچی ولی اگه این طور نیست ، پس روش کار کردن با کمپوننت های مختلف چجوری هه و چرا یه کمپوننتی مثل اتوات رو مستقیم فراخونی میکنیم ولی اینا رو باید توی toolbox اضافه کنیم؟
بعد اینکه از کجا باید بفهمیم اولا یه dll ای کمپوننت هست یا dll معمولی و دوما سازگار با ویندوز 32 بیت هست یا 64 بیت و سوما از کجا میشه فهمید که کمپوننتی ویژال (کنترل) هست که باید به فرم (و ...) اضافه بشه یا غیر ویژال هست و چهارما یه کمپوننت ای مثل wmp که فقط بصورت غیر ویژال بخوایم ازش استفاده کنیم (کنترلی از کمپوننت wmp رو به فرم اضافه نکنیم) ، راهی برای استفاده ازش نیست؟ فقط محکومیم که اول حالت و کنترل ویژال شو به فرم اضافه و بعد ازش استفاده کنیم؟
پس اینکه کمپوننت ها اول باید در رجیستری ثبت بشن چی؟ ما الان نه توی استفاده از codejock و نه اتوات ، توی رجیستری ثبت نکردیم ولی کار کرد !
ممنون
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
شما نباید یک DLL ئه Native رو با رفرنس اضافه کنید. اون DLL هم ActiveX ئه، باید ویژوال استدیو به عنوان یک COM. ازتون قبولش کنه تا برای اون Ax رو بسازه.
اون Ax ئه که ازش کلاس می سازید، نه خود DLL. مادامی که اون Ax ئه ساخته نشده و در پروژه تون رفرنس نداره، چیزی از محتویات DLL برای NET. تعریف نشده.
یک فرم رو در پروژه تون در حالت طراحی قرار بدید. باید روی پنجره Toolbox در یکی از Tab هایش راست کلیک کنید و ...Choose Item رو انتخاب کنید. زبانه COM Components رو فعال کنید. Windows Media Player رو تیک بزنید یا از دکمه Browse استفاده کنید. تا زمانی که یکبار از اون کنترل موجود در Toolbox استفاده نکنید Ax و رفرنس ایجاد نمیشه.
از توی Toolbox اون کنترل Windows Media Player رو بردارید و روی فرم تان قرار بدهید. حالا اون Ax ئه ساخته شده و رفرنس ایجاد شده، حالا می توانید اون کنترل رو از روی فرم پاک اش کنید.

سلام
استاد علی این تیکه ای که گفتین :

"تا زمانی که یکبار از اون کنترل موجود در Toolbox استفاده نکنید Ax و رفرنس ایجاد نمیشه.
از توی Toolbox اون کنترل Windows Media Player رو بردارید و روی فرم تان قرار بدهید. حالا اون Ax ئه ساخته شده و رفرنس ایجاد شده، حالا می توانید اون کنترل رو از روی فرم پاک اش کنید"

این رو میشه بصورت کد نویسی انجام داد؟ یعنی نشه با موس و کلیک روی صفحه اضافه کرد؟
 

the_king

مدیرکل انجمن
ممنون استاد علی :rose:
اه چقدر راحته
پس سری قبل شما میگفتین کمپوننت باید در رجیستری ثبت بشه !
بله، جایی نوشتم که نباید ثبت بشه؟ ثبت شدن کمپوننت در Registry ربطی به نحوه استفاده اش در ویژوال استدیو نداره. وقتی در رجیستری ثبت نشده باشه یا جابجا بشه خطای دسترسی بهش بوجود میاد.
در واقع من قشنگ متوجه نشدم . در چه صورت کمپوننت ها باید ثبت بشن و در چه صورت خودمون از پنجره ی toolbox باید اضافه کنیم؟ کلا متوجه ی انواع کمپوننت ها و نحوه های مختلف کار کردن باهاشون نشدم
مثلا کمپوننت اتوات رو وقتی میخوایم استفاده کنیم ، همونطور که گفتم ، نیازی به رجیستر کردن نداره و نمیدونم که توی متد سازنده اش این کار رو میکنه یا نه .
شما وقتی ویژوال استدیو رو باز می کنید در Toolbox همه کنترل های ActiveX ثبت شده رو می بینید؟ خوب معلومه که نه. اینکه کمپوننت باید در Registry ثبت بشه که ربطی به Toolbox ویژوال استدیو نداره. شما در Toolbox قرارش می دهید تا بتوانید بردارید بذاریدش روی فرم برنامه تون. این دو تا عمل جدا هستند و ربطی هم بهم ندارند. قبلا در مورد رجیستر کردن ActiveX و راه های دیگه بدون رجیستر کردن صحبت کردیم، اینکه بگید توی متد سازنده اش اینکار رو می کنه بی معنیه. اگر قرار بود متد سازنده همینطور خود به خود اجرا بشه که دیگه رجیستر کردن معنی نداشت.

همه ی کمپوننت های ویژال و بصری (کنترلی) رو اگه بخوایم استفاده کنیم ، باید در قسمت toolbox خودمون (با browse>com) اضافه کنیم؟ کنترل های غیر بصری این کار رو لازم ندارن؟ واسه همینه کمپوننت های wmp و این codejock ها رو به این روش اضافه میکنیم؟ اگه این طوره که هیچی ولی اگه این طور نیست ، پس روش کار کردن با کمپوننت های مختلف چجوری هه و چرا یه کمپوننتی مثل اتوات رو مستقیم فراخونی میکنیم ولی اینا رو باید توی toolbox اضافه کنیم؟
اگه کنترلی رو روی فرم قرار نمی دهید در Toolbox قرار گرفتنش بی فایده به نظر میاد ولی اینطور نیست، چون اگه بخواهید به ساختار کلاس هایش دسترسی داشته باشید باید Ax برایش ساخته بشه که بدون قرار گرفتن در Toolbox ایجاد نمیشه.
بعد اینکه از کجا باید بفهمیم اولا یه dll ای کمپوننت هست یا dll معمولی و دوما سازگار با ویندوز 32 بیت هست یا 64 بیت و سوما از کجا میشه فهمید که کمپوننتی ویژال (کنترل) هست که باید به فرم (و ...) اضافه بشه یا غیر ویژال هست و چهارما یه کمپوننت ای مثل wmp که فقط بصورت غیر ویژال بخوایم ازش استفاده کنیم (کنترلی از کمپوننت wmp رو به فرم اضافه نکنیم) ، راهی برای استفاده ازش نیست؟ فقط محکومیم که اول حالت و کنترل ویژال شو به فرم اضافه و بعد ازش استفاده کنیم؟
پس اینکه کمپوننت ها اول باید در رجیستری ثبت بشن چی؟ ما الان نه توی استفاده از codejock و نه اتوات ، توی رجیستری ثبت نکردیم ولی کار کرد !
ممنون
سوال تون تکراریه، مشخصه که پاسخ ها رو سر سری میخونید. رجوع شود به post-1388838. هر زمان در نام یا مشخصات ActiveX ای به 64 بیتی بودنش اشاره نشد 32 بیتی ئه، خیلی به ندرت ActiveX ای نسخه 64 بیتی داره، شاید از 1000 تا یکی اش هم نباشه. وقتی شما در مورد یک کنترلی اطلاعاتی نداشته باشید قاعدتا نمی توانید ازش استفاده کنید، چه برسه به اینکه بدانید ویژوال ئه یا نه. قاعدتا قبل از اینکه به فکر اضافه کردنش بیافتید باید بدانید که قراره باهاش چه کاری انجام بدید. مثل یک فایل exe که ممکنه فرم داشته باشه یا Console ای باشه یا هیچکدوم. اصولا یک فایل اجرایی بدون راهنما و مستنداتش کاربردی نداره.
یه طوری میگید محکوم که انگار با قرار دادنش در Toolbox میخوان شکنجه تون کنن. توضیحاتی که در مورد Ax داده بودم رو مجددا مطالعه کنید، ظاهرا شما متوجه نقش اون Ax نشده اید.
وقتی کنترلی رو با Browse اضافه می کنید اگه امکان رجیستر کردنش باشه خود ویژوال استدیو بصورت خودکار Register اش می کنه، ولی این روالی نیست که بعدا و هر بار برنامه تون اجرا میشه اتفاق بیافته. و فراموش نکنید که NET. به اون فایل Ax احتیاج داره که برای ساختنش باید در Toolbox قرارش بدید.
 

the_king

مدیرکل انجمن
سلام
استاد علی این تیکه ای که گفتین :

"تا زمانی که یکبار از اون کنترل موجود در Toolbox استفاده نکنید Ax و رفرنس ایجاد نمیشه.
از توی Toolbox اون کنترل Windows Media Player رو بردارید و روی فرم تان قرار بدهید. حالا اون Ax ئه ساخته شده و رفرنس ایجاد شده، حالا می توانید اون کنترل رو از روی فرم پاک اش کنید"

این رو میشه بصورت کد نویسی انجام داد؟ یعنی نشه با موس و کلیک روی صفحه اضافه کرد؟
شدنش که میشه ولی در نظر بگیرید که استفاده از Aximp.exe و بعد رفرنس دادن به فایل های ساخته شده در پروژه بیشتر وقت می گیره تا اضافه کردنش در Toolbox
Aximp.exe (Windows Forms ActiveX Control Importer)
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
بله، جایی نوشتم که نباید ثبت بشه؟ ثبت شدن کمپوننت در Registry ربطی به نحوه استفاده اش در ویژوال استدیو نداره. وقتی در رجیستری ثبت نشده باشه یا جابجا بشه خطای دسترسی بهش بوجود میاد.

شما وقتی ویژوال استدیو رو باز می کنید در Toolbox همه کنترل های ActiveX ثبت شده رو می بینید؟ خوب معلومه که نه. اینکه کمپوننت باید در Registry ثبت بشه که ربطی به Toolbox ویژوال استدیو نداره. شما در Toolbox قرارش می دهید تا بتوانید بردارید بذاریدش روی فرم برنامه تون. این دو تا عمل جدا هستند و ربطی هم بهم ندارند. قبلا در مورد رجیستر کردن ActiveX و راه های دیگه بدون رجیستر کردن صحبت کردیم، اینکه بگید توی متد سازنده اش اینکار رو می کنه بی معنیه. اگر قرار بود متد سازنده همینطور خود به خود اجرا بشه که دیگه رجیستر کردن معنی نداشت.


اگه کنترلی رو روی فرم قرار نمی دهید در Toolbox قرار گرفتنش بی فایده به نظر میاد ولی اینطور نیست، چون اگه بخواهید به ساختار کلاس هایش دسترسی داشته باشید باید Ax برایش ساخته بشه که بدون قرار گرفتن در Toolbox ایجاد نمیشه.

سوال تون تکراریه، مشخصه که پاسخ ها رو سر سری میخونید. رجوع شود به post-1388838. هر زمان در نام یا مشخصات ActiveX ای به 64 بیتی بودنش اشاره نشد 32 بیتی ئه، خیلی به ندرت ActiveX ای نسخه 64 بیتی داره، شاید از 1000 تا یکی اش هم نباشه. وقتی شما در مورد یک کنترلی اطلاعاتی نداشته باشید قاعدتا نمی توانید ازش استفاده کنید، چه برسه به اینکه بدانید ویژوال ئه یا نه. قاعدتا قبل از اینکه به فکر اضافه کردنش بیافتید باید بدانید که قراره باهاش چه کاری انجام بدید. مثل یک فایل exe که ممکنه فرم داشته باشه یا Console ای باشه یا هیچکدوم. اصولا یک فایل اجرایی بدون راهنما و مستنداتش کاربردی نداره.
یه طوری میگید محکوم که انگار با قرار دادنش در Toolbox میخوان شکنجه تون کنن. توضیحاتی که در مورد Ax داده بودم رو مجددا مطالعه کنید، ظاهرا شما متوجه نقش اون Ax نشده اید.
وقتی کنترلی رو با Browse اضافه می کنید اگه امکان رجیستر کردنش باشه خود ویژوال استدیو بصورت خودکار Register اش می کنه، ولی این روالی نیست که بعدا و هر بار برنامه تون اجرا میشه اتفاق بیافته. و فراموش نکنید که NET. به اون فایل Ax احتیاج داره که برای ساختنش باید در Toolbox قرارش بدید.

ممنون استاد علی
آره تکراری بود ببخشید . سر سری نه ولی چون مبتدی ام بعضی از جواب هاتون رو متوجه نمیشم که در دفعات بعدی خوندن متوجه میشم یا خیلی بعدتر که اطلاعات کامل تر از اون مطلب بدست آوردم و دوباره جواب رو میخونم متوجه میشم . بازم بعضی از جواب هاتون هست که حتی هنوز کامل درک نکردم . بعضا هم تنبلی میکنم و زیاد تمرین نمیکنم یا جاهایی که متوجه نمیشم رو در وهله ی اول سر سری میخونم :) که سعی میکنم جدی تر بگیرم (ببخشید)
---------------------
آها ، Ax مخفف ActiveX هه؟! :green: همیشه با بقیه ی حروف ها ترکیب میشد اصلا آدم معناشو نمیفهمید :green:
پس یه سئوال . چرا کمپوننت اتوات مثل بقیه ی کمپوننت ها نیست که توی toolbox بذاریم؟
بعد اینکه الان اینایی که توی toolbox میذاریم و جواب میدن ، بخاطر اینه که همونطور که گفتید ، خود ویژال استودیو توی رجیستر ثبت میکنه توی ویندوزمون؟ یعنی توی ویندوز دیگه بره ، ارور میده تا ثبت نکنیم؟ شما کد ثبت کردن رو دادید ولی نگفتید توی چه متد یا کلاس یا با چه ابزاری میشه کمپوننت ها رو ثبت کرد؟
-------------------
یه درخواست خارج از موضوع اینکه ، اگه میتونید ، جواب این دوستمون رو میدید؟ (گفتم از یه انجمن دیگه بیاد اینجا شاید شما جواب بدید) :
مشکل تایپ و خواندن کارکتر فارسی "ی" در LUA

من بلد نیستم
 

the_king

مدیرکل انجمن
ممنون استاد علی
آره تکراری بود ببخشید . سر سری نه ولی چون مبتدی ام بعضی از جواب هاتون رو متوجه نمیشم که در دفعات بعدی خوندن متوجه میشم یا خیلی بعدتر که اطلاعات کامل تر از اون مطلب بدست آوردم و دوباره جواب رو میخونم متوجه میشم . بازم بعضی از جواب هاتون هست که حتی هنوز کامل درک نکردم . بعضا هم تنبلی میکنم و زیاد تمرین نمیکنم یا جاهایی که متوجه نمیشم رو در وهله ی اول سر سری میخونم :) که سعی میکنم جدی تر بگیرم (ببخشید)
---------------------
آها ، Ax مخفف ActiveX هه؟! :green: همیشه با بقیه ی حروف ها ترکیب میشد اصلا آدم معناشو نمیفهمید :green:
قاعدتا Ax اختصاری همونه ولی اصطلاحی نیست که من بخوام بجای ActiveX استفاده کنم، پیشوندی است که مایکروسافت در ویژوال استدیو موقع ساختن فایل Wrapper بصورت خودکار به فایل های ActiveX اضافه می کنه. منظورم از Ax اون فایل Wrapper ئه، نه خود ActiveX. همون فایلی که ویژوال استدیو بصورت خودکار میسازه و پیشوند Ax داره و بهش رفرنس میده.

پس یه سئوال . چرا کمپوننت اتوات مثل بقیه ی کمپوننت ها نیست که توی toolbox بذاریم؟

نباید فرقی داشته باشه، نمیدونم با چه کدی با کمپوننت مورد نظر تون کار می کنید که نظری بدم.
بعد اینکه الان اینایی که توی toolbox میذاریم و جواب میدن ، بخاطر اینه که همونطور که گفتید ، خود ویژال استودیو توی رجیستر ثبت میکنه توی ویندوزمون؟ یعنی توی ویندوز دیگه بره ، ارور میده تا ثبت نکنیم؟ شما کد ثبت کردن رو دادید ولی نگفتید توی چه متد یا کلاس یا با چه ابزاری میشه کمپوننت ها رو ثبت کرد؟
اصولا خطا میده مگر اینکه اون مواردی که در مورد روش های عدم نیاز به Register کردن گفته بودم رعایت بشه. معمولا با یک Setup ساز این ثبت شدن در Registry رو انجام میدن، خود برنامه نباید دخالتی بکنه. قرار نیست هر برنامه ای که اجرا شد یکبار ActiveX خودش رو ثبت کنه، ممکنه یک نسخه جدیدترش در مسیر دیگه ای وجود داشته باشه، اصولی نیست که بخواهید در کد برنامه تون چیزی رو Register کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ActiveX ها رو یا مستقیما با regsvr32 در Registry نصب می کنند یا در یک Setup قرار می دهند که اینکار رو با واسطه انجام بده.
در ویندوز های 64 بیتی دو تا regsvr32 هست، c:\Windows\SysWOW64\regsvr32.exe و c:\Windows\System32\regsvr32.exe که اولی برای سازگاری با نرم افزار های 32 بیتی ئه و ممکنه دومی با همه ActiveX ها درست کار نکنه. وقتی مسیر فایل ActiveX رو به عنوان پارامتر به regsvr32 بدهید ثبت اش می کنه، اگه سوئیچ u/ رو اضافه کنید از Registry حذف اش می کنه. اگه سوئیچ s/ رو اضافه کنید مخفیانه و بدون پیغام ثبت اش می کنه.
مثلا "C:\Windows\SysWOW64\regsvr32.exe /s "D:\My Active\ac.ocx فایل ac.ocx رو بدون پیغام ثبت می کنه.


قاعدتا Ax اختصاری همونه ولی اصطلاحی نیست که من بخوام بجای ActiveX استفاده کنم، پیشوندی است که مایکروسافت در ویژوال استدیو موقع ساختن فایل Wrapper بصورت خودکار به فایل های ActiveX اضافه می کنه. منظورم از Ax اون فایل Wrapper ئه، نه خود ActiveX. همون فایلی که ویژوال استدیو بصورت خودکار میسازه و پیشوند Ax داره و بهش رفرنس میده.


نباید فرقی داشته باشه، نمیدونم با چه کدی با کمپوننت مورد نظر تون کار می کنید که نظری بدم.

اصولا خطا میده مگر اینکه اون مواردی که در مورد روش های عدم نیاز به Register کردن گفته بودم رعایت بشه. معمولا با یک Setup ساز این ثبت شدن در Registry رو انجام میدن، خود برنامه نباید دخالتی بکنه. قرار نیست هر برنامه ای که اجرا شد یکبار ActiveX خودش رو ثبت کنه، ممکنه یک نسخه جدیدترش در مسیر دیگه ای وجود داشته باشه، اصولی نیست که بخواهید در کد برنامه تون چیزی رو Register کنید.

ممنون
ویندوز من 64 بیت هست . الان این کد رجیستر که دادین رو باید یا توی cmd بنویسم (که این جوری نمیشه توی هر سیستم طرف خودم برم بنویسم یا توی زمان ساخت ستاپ برنامه که گفتین باید کاری کنم که توی سیستم طرف رجیستر بشن کمپوننت ها یا اگه این روش هم نخوام و بخوام هر دوی پستی که ازتون نقل قول کردم ، کدهاشونو توی محیط برنامه نویسی بنویسم ، باید در چه متد یا نام کلاسی رو که با اعضاش باید بجای cmd بنویسم چیه؟
----------------
قضیه ی اتوات هم 3 فایل بنام های AutoItX3.Assembly.dll و AutoItX3.dll و AutoItX3_x64.dll رو توی پوشه ی bin کپی میکنم و فایل AutoItX3.Assembly.dll که مستقیما ActiveX نیست و با سی شارپ سازگار هست رو reference میکنم و بعد از کلاس هاش استفاده میکنم . البته این روش مشخص هست که بصورت عادی استفاده و ریفرنس میشه چون فایل AutoItX3.Assembly.dll فایل native نیست اما وقتی بصورت مستقیم فایل AutoItX3.dll رو که توی toolbox قرار میدم ، چیزی رو برام توی لیست اش اضافه نمیکنه به این روش
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
شدنش که میشه ولی در نظر بگیرید که استفاده از Aximp.exe و بعد رفرنس دادن به فایل های ساخته شده در پروژه بیشتر وقت می گیره تا اضافه کردنش در Toolbox
Aximp.exe (Windows Forms ActiveX Control Importer)

ممنون
این یک فایلی هست که باید دانلود کنیم و دستوراتی که اونجا گفت رو توش اجرا کنیم یا صرفا فقط همون دستورات رو در cmd باید بنویسیم؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
الان توی ویندوز دیگه ای که هیچ کمپوننتی توش ثبت نشده و حتی ویژال استودیو هم نصب نشده ، پروژه ای که فقط کمپوننت در اون استفاده اما رجیستر نشده بود ، توش از کمپوننت اتوات استفاده کردم ، در اون ویندوز دیگه جواب داد اما بقیه مثل کمپوننت codejock جواب ندادن
 

the_king

مدیرکل انجمن
ممنون
ویندوز من 64 بیت هست . الان این کد رجیستر که دادین رو باید یا توی cmd بنویسم (که این جوری نمیشه توی هر سیستم طرف خودم برم بنویسم یا توی زمان ساخت ستاپ برنامه که گفتین باید کاری کنم که توی سیستم طرف رجیستر بشن کمپوننت ها یا اگه این روش هم نخوام و بخوام هر دوی پستی که ازتون نقل قول کردم ، کدهاشونو توی محیط برنامه نویسی بنویسم ، باید در چه متد یا نام کلاسی رو که با اعضاش باید بجای cmd بنویسم چیه؟

کار تون بیشتر خرابکاری ئه، بزور یک فایلی رو که ممکنه قدیمی و منسوخ باشه یا با برنامه های دیگه ناسازگار باشه رو در Registry ثبت می کنید. از اون کار ها است که معمولا فقط تو نرم افزار های ایرانی دیده میشه.
دقت کنید که هر گونه ارجاع قبل از اینکه اون ActiveX ثبت بشه صورت بگیره باعث بروز خطا و توقف اجرا میشه، یعنی فرضا توی همون فرمی که کنترل رو قرار دادید نباید برای ثبت اش تلاش کنید. در ضمن برخی از ویروس کش ها نسبت بهش واکنش نشون میدن چون یه عملیات مشکوک ئه.
کد:
            var sourcePath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Codejock.Controls.v13.4.0.Demo.ocx");
            var destPath = Path.Combine(Environment.SystemDirectory, Path.GetFileName(sourcePath));
            if (File.Exists(sourcePath) && (File.Exists(destPath) == false))
            {
                var regsvr32 = Path.Combine(Path.GetDirectoryName(Environment.SystemDirectory), "SysWOW64\\regsvr32.exe");
                if (File.Exists(regsvr32) == false)
                {
                    regsvr32 = Path.Combine(Environment.SystemDirectory, "regsvr32.exe");
                }
                if (File.Exists(regsvr32))
                {
                    File.Copy(sourcePath, destPath, true);
                    Process.Start(regsvr32, string.Format("/s \"{0}\"", Path.GetFileName(destPath)));
                }
            }


قضیه ی اتوات هم 3 فایل بنام های AutoItX3.Assembly.dll و AutoItX3.dll و AutoItX3_x64.dll رو توی پوشه ی bin کپی میکنم و فایل AutoItX3.Assembly.dll که مستقیما ActiveX نیست و با سی شارپ سازگار هست رو reference میکنم و بعد از کلاس هاش استفاده میکنم . البته این روش مشخص هست که بصورت عادی استفاده و ریفرنس میشه چون فایل AutoItX3.Assembly.dll فایل native نیست اما وقتی بصورت مستقیم فایل AutoItX3.dll رو که توی toolbox قرار میدم ، چیزی رو برام توی لیست اش اضافه نمیکنه به این روش
وقتی ActiveX ای کنترلی نداشته باشه چیزی توی لیست اضافه نمیشه. البته این معنی اش این نیست که الزاما ActiveX نیست.

ممنون
این یک فایلی هست که باید دانلود کنیم و دستوراتی که اونجا گفت رو توش اجرا کنیم یا صرفا فقط همون دستورات رو در cmd باید بنویسیم؟
نباید دانلود کنید، جزو ابزار های ویژوال استدیو ئه، روی سیستمی که ویژوال استدیو نصب نیست به تنهایی کار نمی کنه.
در منوی start در پوشه Visual Studio xxxx Tools یه Command Prompt هست که مسیری رو براتون باز می کنه که اگه aximp رو تایپ و Enter کنید اجرا میشه.

الان توی ویندوز دیگه ای که هیچ کمپوننتی توش ثبت نشده و حتی ویژال استودیو هم نصب نشده ، پروژه ای که فقط کمپوننت در اون استفاده اما رجیستر نشده بود ، توش از کمپوننت اتوات استفاده کردم ، در اون ویندوز دیگه جواب داد اما بقیه مثل کمپوننت codejock جواب ندادن
کلا شک دارم که اون dll مورد نظرتون ActiveX باشه. حتی ممکنه ActiveX باشه ولی از توابع Export شده اش بصورت عادی با LoadLibrary استفاده شده باشه. یا موقعی که شما از AutoItX3.Assembly.dll استفاده می کنید عمل ثبت در Registry رو انجام میده.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام استاد علی
تفریق اعداد باینری ، این جوریه که عدد مثبت رو به اضافه ی تبدیل شده ی اون عدد منفی حساب میکنیم؟ یعنی مثل عدد

کد:
55-67
که برابر
کد:
55+(-67)
حساب میکنیم ، اونا هم همینطوره؟
پس یعنی مثلا جواب عبارت اعداد باینری زیر درسته؟

کد:
10-1 => 10+(-1)
-1 => 00000001 => 11111110 => 11111111
10 + 11111111 = 100000001
پس جواب این ، باید بشه 257 ؟ درسته؟!
 

جدیدترین ارسال ها

بالا