PDA

View Full Version : حرفه ای: مشکل در تبدیل string به char



jblaox
چهارشنبه 19 تیر 1392, 02:08 صبح
سلام

توجه : فرمت ذخیره فایل cpp به صورت utf-8 است .

من کد زیر برای اجرای برنامه به کار میبرم اما به ورودی آدرس گیر میده :

#include <windows.h>
char szPath[] = "C:\\WINDOWS\\system32\\Calc.exe";
HINSTANCE hRet = ShellExecute(
HWND_DESKTOP, //Parent window
"open", //Operation to perform
szPath, //Path to program
NULL, //Parameters
NULL, //Default directory
SW_SHOW); //How to open

مشکل همون خط اول که گیر میده به آدرس فایل و خطا این است :

error : argument of type "char *" is incompatible with parameter of type "LPCWSTR={const WCHAR={__wchar_t} *}" (Intel C++‎‎ 13.0)



البته وقتی اینگونه مینویسم اجرا میشود ، اما آدرس فایل اجرای من متغییر و نه مثل اینجا ثابت !

char szPath[] = "C:\\WINDOWS\\system32\\Calc.exe";
HINSTANCE hRet = ShellExecute(
HWND_DESKTOP, //Parent window
_T("open"), //Operation to perform
_T("C:\\WINDOWS\\system32\\Calc.exe"), //Path to program
NULL, //Parameters
NULL, //Default directory
SW_SHOW); //How to open

چه کنم حالا ؟؟

Negative_Se7en
چهارشنبه 19 تیر 1392, 02:43 صبح
احتمالا برنامه شما با فلگ UNICODE کامپایل شده . و در حالت UNICODE ماکروی ShellExecute برابر تابع ShellExecuteW هست.
برای همین شما باید از Wide Characters استفاده کنید.
به این تغییر بده :

#include <windows.h>
wchar_t szPath[] = L"C:\\WINDOWS\\system32\\Calc.exe";
HINSTANCE hRet = ShellExecute(
HWND_DESKTOP, //Parent window
L"open", //Operation to perform
szPath, //Path to program
NULL, //Parameters
NULL, //Default directory
SW_SHOW); //How to open

jblaox
چهارشنبه 19 تیر 1392, 12:55 عصر
احتمالا برنامه شما با فلگ UNICODE کامپایل شده . و در حالت UNICODE ماکروی ShellExecute برابر تابع ShellExecuteW هست.
برای همین شما باید از Wide Characters استفاده کنید.
به این تغییر بده :

#include <windows.h>
wchar_t szPath[] = L"C:\\WINDOWS\\system32\\Calc.exe";
HINSTANCE hRet = ShellExecute(
HWND_DESKTOP, //Parent window
L"open", //Operation to perform
szPath, //Path to program
NULL, //Parameters
NULL, //Default directory
SW_SHOW); //How to open

سلام متشکرم از راهنمایی شما ، اما بهتر دیدم که به جای این کار ، مقدار کاراکتر ست را Multi-byte... قرار بدهم .

saied_hacker
چهارشنبه 19 تیر 1392, 19:32 عصر
اینجوری میشه ؟!
char lp[] = "C:\\WINDOWS\\system32\\Calc.exe";
CString s(lp);
LPCWSTR f = s;

jblaox
چهارشنبه 19 تیر 1392, 22:36 عصر
اینجوری میشه ؟!
char lp[] = "C:\\WINDOWS\\system32\\Calc.exe";
CString s(lp);
LPCWSTR f = s;

سلام به شما دوست گرامی

من صورت مسئله را پاک کردم !!!

از این که لطف کردید و پاسخ دادید متشکر هستم