یک چیز دیگه اینکه اون قضیه ی CoInitializeSecurity که قبلا بحث کرده بودیم ، آخر بخاطر این در پروژه های ویندوز فرم قابل استفاده نبود چون متد Main در این نوع پروژه ها ، اتریباتسِ STAThread داره که این اتریباتس ، داخل خودش ، این متد CoInitializeSecurity را فراخونی میکنه و چون این متدِ CoInitializeSecurity برای هر پروسه ، بیشتر از یکبار نمیتونه فراخونی بشه ، واسه ی همین در این نوع پروژه ها قابل استفاده نیست . درسته؟
یعنی مشکل از سی شارپ نیست . درسته؟
اگه آره ، پس میتونیم یه پروژه ی مثلا کنسول یا حتی سرویس ای بنویسیم که از طریق این نوع پروژه ها ، متد CoInitializeSecurity را فراخونی کنیم . درسته؟ (پروژه ی dll شدنی نیست . هست؟)
و بعد هم بجای اینکه عملیات مربوط به بکاپ (مثل بکاپ گرفتن و حذف بکاپ و ...) را از پروژه ی ویندوز فرم انجام بدیم ، از این نوع پروژه ها انجام بدیم اما دستورات را از توابع ویندوز فرم براشون ارسال کنیم . درسته؟
--------------------------------------------------------------------
ویرایش :
نه .
لینک زیر میگه مشکل از clr هه که قبلا متد CoInitializeSecurity را توی خودش صدا زد . بنابراین وقتی متد Main یا هر کد دیگه ای در سی شارپ بخواد شروع بشه ، چون قبل اش clr شروع شده بود ، مشکل خواهئد داشت (البته قبلا هم اینو خونده بودم) :
pinvoke.net: CoInitializeSecurity (ole32)
اما من متوجه ی راه حلی که داد نشدم :
The workaround is to write an unmanaged "shim" that will call CoInitializeSecurity, then activate and call into managed code. You can do this via an export from a mixed-mode C++ DLL, by registering a managed component for use by COM, or by using the CLR hosting API.
RPC_E_TOO_LATE (Update from Yahor Sinkevich):
Usually RPC_E_TOO_LATE happens when CoInitializeSecurity already called (implicitly or explicitly, it does no matter). When you using Visual Studio, it use so called "Visual Studio Hosting Process" where CoInitializeSecurity already called. Turn off Visual Studio hosting process and have fun, now you can debug your application that calls CoInitializeSecurity with no RPC_E_TOO_LATE error.
اولش میگه توی سی پلاس پلاس ای که unmanaged هست ، اون تابع CoInitializeSecurity را فراخونی کنیم و بصورت فایل dll دربیاریم . بعد توی سی شارپ ، توسط استفاده از api های CLR hosting ازش میتونیم استفاده کنیم (استفاده از CLR hosting سخت هه؟) البته اون روش اش را که گفت با ثبت کردن کمپوننت managed برای استفاده توسط com را متوجه نشدم .