Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: [ถาม] วิธีตรวจสอบ URL  (Read 182991 times)

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #105 on: ตุลาคม 19, 2012, 12:14:16 pm »
ท่านแอดมินครับ เวลาจะเรียกใช้ฟังก์ชั่น mfc มันต้องทำอะไรก่อนครับ

ผมก๊อปตัวอย่างจากเว็บมามันก็เออเร่ออีกแล้ว  ตำราบนเว็บสอนไม่เคยรู้เรื่องเลย

ตัวอย่างที่11-1 เป็นการเปิดไฟล์ example.txt และอ่านข้อมูลภายในไฟล์นั้นออกมา

CSidioFile exfile(“C:\\example.txt”,CFile::modeRead);
CString buffer;
Exfile.ReadString(buffer);
AfcMessageBox(buffer);



Compiling...
diamond.cpp
E:\vc\diamond\diamond.cpp(140) : error C2065: 'CSidioFile' : undeclared identifier
E:\vc\diamond\diamond.cpp(140) : error C2146: syntax error : missing ';' before identifier 'exfile'
E:\vc\diamond\diamond.cpp(140) : error C2065: 'exfile' : undeclared identifier
E:\vc\diamond\diamond.cpp(142) : error C2065: 'Exfile' : undeclared identifier
E:\vc\diamond\diamond.cpp(142) : error C2228: left of '.ReadString' must have class/struct/union type
E:\vc\diamond\diamond.cpp(143) : error C2065: 'AfcMessageBox' : undeclared identifier

บทที่ 1-10 ก็อ่านหมดแล้วไม่มีบอก เศร้า

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #106 on: ตุลาคม 19, 2012, 12:24:25 pm »
ท่านแอดมินครับ เวลาจะเรียกใช้ฟังก์ชั่น mfc มันต้องทำอะไรก่อนครับ

ผมก๊อปตัวอย่างจากเว็บมามันก็เออเร่ออีกแล้ว  ตำราบนเว็บสอนไม่เคยรู้เรื่องเลย

ตัวอย่างที่11-1 เป็นการเปิดไฟล์ example.txt และอ่านข้อมูลภายในไฟล์นั้นออกมา

CSidioFile exfile(“C:\\example.txt”,CFile::modeRead);
CString buffer;
Exfile.ReadString(buffer);
AfcMessageBox(buffer);



Compiling...
diamond.cpp
E:\vc\diamond\diamond.cpp(140) : error C2065: 'CSidioFile' : undeclared identifier
E:\vc\diamond\diamond.cpp(140) : error C2146: syntax error : missing ';' before identifier 'exfile'
E:\vc\diamond\diamond.cpp(140) : error C2065: 'exfile' : undeclared identifier
E:\vc\diamond\diamond.cpp(142) : error C2065: 'Exfile' : undeclared identifier
E:\vc\diamond\diamond.cpp(142) : error C2228: left of '.ReadString' must have class/struct/union type
E:\vc\diamond\diamond.cpp(143) : error C2065: 'AfcMessageBox' : undeclared identifier

บทที่ 1-10 ก็อ่านหมดแล้วไม่มีบอก เศร้า
จาก code ที่คุณให้มาคืด กำหนดค่า path จากนั่นให้มันแสดงด้วย MessageBox ต้องถามก่อน code นี้คุณเขียนDLL หรือ mfc ธรรมดาครับแต่ใน code  ที่ error 'CSidioFile' : undeclared identifier  มันบอกว่าหาฟังก์ชั่นไม่เจอ ต้องถามก่อน ว่าได้ include prototype ของ ฟังก์ชั่น CSidioFile หรือยังครับ  สงสัยนิด CSidioFile หรือครับไม่ใช้ CStudioFile หรือครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #107 on: ตุลาคม 19, 2012, 12:34:11 pm »
สงสัยเว็บมันเขียนผิด  ผมไม่ได้ทำอะไรนอกจากก๊อปโค้ด 4 บรรทัดนั้นมาครับ  เพราะในเว็บไม่ได้บอกให้ทำอะไร  include อะไรเนี่ยทำไม่เป็นมันไม่มีบอกครับ
มีบทที่ 4 สอนให้ทำคลาสเอง  แต่ไม่มีบทไหนสอนให้เรียกคลาส MFC เลย

อันนี้เขียนด้วย MFC DLL ครับ ส่วน messagebox เดี๋ยวค่อยลบทิ้ง แล้วรีเทิร์นค่าที่อ่านได้ออกมาแทนครับ

ที่จะทำทั้งหมดคือ 
- ย้ายโค้ดจาก mq4 มาที่ dll  -> ทำได้แล้ว
- เขียน dll ให้้อ่านไฟล์ text  -> กำลังมึนอยู่
- เขียน dll ให้อ่าน text จากเว็บ -> เอาไว้ทีหลัง

4 วันแล้วยังอ่านไฟล์ไม่ได้เลยครับ อิอิ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #108 on: ตุลาคม 19, 2012, 12:54:40 pm »
คำแนะนำนะครับ
- เขียน dll ให้้อ่านไฟล์ text  -> กำลังมึนอยู่ ( ศึกษา วิธีเขียนอ่านเขียนไฟลืของ C++ ธรรมดานี้หละครับแล้วจับไปดัดแปลงนิดหน่อยใช่บน DLL ได้เลยครับ )
- เขียน dll ให้อ่าน text จากเว็บ -> เอาไว้ทีหลัง ( ศึกษา wininet.dll ครับศึกษาฟังก์ชั่นแล้วนำมาใช้งานครับ )

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #109 on: ตุลาคม 19, 2012, 12:58:06 pm »
ขอบคุณครับ

wininet ตัวนี้ทำใน mq4 ได้แล้วครับ  แต่พอย้ายไปใส่ dll ก็ยังไม่รู้วิธีอิมพอร์ตอีก  แต่เอาไว้มึนทีหลัง

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #110 on: ตุลาคม 19, 2012, 05:19:27 pm »
ท่านแอดมินครับ ตอนนี้อ่านไฟล์ได้แล้ว  แต่เปรียบเทียบไฟล์ไม่ได้

ผมใช้ fscanf อ่านไฟล์ออกมาได้ทีละคำ

สมมุติไฟล์ เขียนว่า  1234
เวลาอ่านมันก็อ่านได้ 1234

แต่พอเอามาเปรียบเทียบ  สมมุติเก็บไว้ที่ตัวแปร word
if ( word =="1234" )  มันดันไม่ถูกซะงั้นครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #111 on: ตุลาคม 19, 2012, 05:33:18 pm »
ท่านแอดมินครับ ตอนนี้อ่านไฟล์ได้แล้ว  แต่เปรียบเทียบไฟล์ไม่ได้

ผมใช้ fscanf อ่านไฟล์ออกมาได้ทีละคำ

สมมุติไฟล์ เขียนว่า  1234
เวลาอ่านมันก็อ่านได้ 1234

แต่พอเอามาเปรียบเทียบ  สมมุติเก็บไว้ที่ตัวแปร word
if ( word =="1234" )  มันดันไม่ถูกซะงั้นครับ
ข้อความเป้น String ใช้ไหมครับ ถ้าใช่ใช้ strcmp( )   เปรียบเทียบครับ มันไม่เหมือน MQl4 ถ้าเปรียบเทียบ String จะเขียนแบบเงื่อนไขได้เลยครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #112 on: ตุลาคม 19, 2012, 05:39:42 pm »
โอพลาดอย่างแรง  ลืมไปเลย  ผ่านแล้วขอบคุณครับ

ต่อไปก็ winiinet


ไม่ต้องประกาศ include ครับเพราะการเอา Dll เราต้อง add .obj มันมาใช้แต่ wininet.dll มันมี obj อยู่ในตัว visual c++ แล้วเลยไม่ต้องทำไรเพิ่มแต่ต้องเขียน code แบบนี้

ในไฟล์หลักที่เราเขียน dll หาตรงที่ประกาศ dll
#define MT4_EXPFUNC __declspec(dllexport) // ประกาศ dll
extern "C" __declspec(dllimport) int _stdcall InternetAttemptConnect (int x); // ตัวอย่างเรียกฟังก์ชั่น wininet.dll มาใช้

จากนั่นประกาสส่วนเนื้อของฟังก์ชั่นด้วยนะครับ
MT4_EXPFUNC int _stdcall InternetAttemptConnect (int x)
{

   return 1;

}

ลองดูครับ

ตรงสีแดงนี่ผมลอกไปเลยหรือครับ  เขียนไว้ด้านบนสุดใช่ไหมครับ เหมือนกันตอน import ของ mq4

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #113 on: ตุลาคม 19, 2012, 06:05:44 pm »
สีแดงเป้นตัวเนื้อฟังก์ชั่นครับ ที่จะให้เรียกใช้จาก MT4  แล้วเรียกใช้ function จาก wininet.dll ครับ แล้วส่งค่ากลับไปที่ mt4   แนะนำให้เปลี่ยนชื่อนิดหนึ่งครับ  ไม่งั้นมันจะ overloading ซึ่งผมไม่แน่ใจว่ามันจะทำงานได้ไหมครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #114 on: ตุลาคม 19, 2012, 06:13:13 pm »
แปลว่าการอิมพอร์ตใน c++ เขียนแค่นี้เหรอครับ

extern "C" __declspec(dllimport) int _stdcall InternetAttemptConnect (int x);
extern "C" __declspec(dllimport) int _stdcall InternetOpenA(char* a0, int a1, string a2, string a3, int a4);
extern "C" __declspec(dllimport) int _stdcall InternetOpenUrlA(int a0, char* a1, char* a2, int a3, int a4, int a5);
extern "C" __declspec(dllimport) int _stdcall InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]);
extern "C" __declspec(dllimport) int InternetCloseHandle(int a0);
 

แล้วก็เรียกใช้ฟังก์ชั่นพวกนั้นใน dll ได้เลย เหมือนที่ mq4 เรียก แบบนี้น่าจะไม่มึนเท่าไรครับ อิอิ



admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #115 on: ตุลาคม 19, 2012, 06:20:03 pm »
ตามหลักการคือแบบนั่นครับต้องลองดูก่อน ถ้าเรียกแล้วขึ้นมาใช้ไม่ได้ ต้องศึกษาวิธีของ MFC ที่ใช้ติดต่อ network ครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #116 on: ตุลาคม 22, 2012, 06:27:29 pm »
ท่านแอดมินครับ  ตอนนี้ผมอ่าน url ได้ออกมาเป็นตัวหนังสือแล้ว  แต่ติดปัญหาอีก

สมมุติว่า ไฟล์บนเว็บเขียนไว้แบบนี้

1111
22222
3333
444444

เวลาอ่านมันจะอ่านมาทีละ 1 ตัวอักษร
ผมจะเขียน ให้มันตรวจสอบหาตัว"ขึ้นบรรทัดใหม่"  เพื่อตัดคำออกมาทีละบรรท้ด (c++)

CString content;

do {
      lpBuffer = new char[2000];
      ZeroMemory(lpBuffer, 2000);
      InternetReadFile(hFile, (LPVOID)lpBuffer, 2000, &dwBytesRead);
          

         if( &lpBuffer[0]  != "\n" && &lpBuffer[0]  != "\r")
         {
            content = &lpBuffer[0] ;
            FILE * wfile;
            wfile = fopen ("E:\\MetaTrader - EXNESS\\url.txt","a");
            fputs ( content  ,wfile);
            fclose (wfile);
         }
           

      delete[] lpBuffer;
      lpBuffer = NULL;
   } while (dwBytesRead);

ผมทดสอบการอ่าน  โดยการเขียนกลับลงไฟล์  มันควรจะเขียนได้แบบนี้  1111222223333444444

แต่รันแล้วมันดันเขียนออกมาแบบนี้
1111
22222
3333
444444

แสดงว่ามันตรวจสอบการขึ้นบรรทัดใหม่ไม่ได้   ผิดตรงไหนรบกวนแก้ให้ทีครับ
« Last Edit: ตุลาคม 22, 2012, 06:29:40 pm by D_Diamond »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #117 on: ตุลาคม 22, 2012, 07:10:56 pm »
ลองส่ง code ทั้งหมดมาให้ผมที่ email ครับ admin@thaiforexea.com ครับ ผมต้องลอง test ดูครับถึงรู้ว่าทำไมมัน error ครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #118 on: ตุลาคม 22, 2012, 07:31:55 pm »
รู้แล้วครับ วันก่อนผมถามแล้ว ดันลืมอีก

มันใช้ == หรือ != ไม่ได้ ต้องใช้ strcmp()

เขียนสตริงทีก็มึนที อิอิ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: [ถาม] วิธีตรวจสอบ URL
« Reply #119 on: ตุลาคม 22, 2012, 08:17:08 pm »
ครับ ส่วนฟังก์ชั่นใน wininet.dll ก็เรียกใช้แบบนั่นเลยใช้ไหมครับ ไม่มี error อะไรใช่ไหมครับ