سلام.
جای اینکه shellapi.h رو Include کنید، windows.h رو include کنید!
با انجام این کار مشکلم حل شد.
البته یک نکته دیگه هم وجود داشت که اون هم مربوط به رشته های یونیکد میشد، ظاهرآ به صورت پیش فرض تمامی رشته ها در visual C++ 2008 به صورت یونیکد بایستی تعریف بشن که با اضافه کردن یک L قبل از هر رشته مشکلم حل شد.
شکل صحیح دستوری که بالاخره کامپایل شد بدین صورت هست :
#include <windows.h>
void main()
{
ShellExecute(NULL, L"open", L"C:\\Programme\\VideoLAN\\VLC\\vlc.exe", NULL, NULL, SW_SHOWNORMAL);
}
اما هنوز چند سوال باقی مونده که ممنون میشم جواب اینها رو هم بدید:
1_ این تابع در سرفایل shellapi.h تعریف شده پس چرا بایستی برای استفاده از اون یک سرفایل دیگه رو ضمیمه کنیم؟
2_پارامتر Operation تنها دستورات "open" ، "edit" ، "print" ، "explore" رو قبول میکنه در حالی که در MSDN نوشته که دستورات بسیار زیاد و متنوعی برای این تابع در دسترس است ، به عنوان مثال کد زیر به درستی کامپایل میشه ولی بعد از اجرا هیچگونه پاسخی از برنامه دریافت نمیشه !
#include <windows.h>
void main()
{
ShellExecute(NULL, L"Compress and email...", L"C:\\Programme\\VideoLAN\\VLC\\vlc.exe", NULL, NULL, SW_SHOWNORMAL);
}
البته برنامه winrar رو هم نصب کردم و گزینه مربوط هم در کلیک راست موس موجود است.
3_ برای دریافت مقادیر بازگشتی تابع (جهت کنترل خطا) باید از چه نوعی استفاده کنم ؟ در MSDN نوع های بازگشتی به صورت رشته نوشته شده اند اما ایا این رشته ها به ترتیب دارای مقادیر عددی از صفر هستند ؟
با نوع unsigned int تست کردم اما کامپایلر خطای زمان کامپایل می گیرد.