EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: D_Diamond on กรกฎาคม 31, 2012, 12:46:13 pm
-
ผมอยากได้วิธีตรวจสอบว่า อีเอตัวนี้มันเรียก url ไหนเพื่อตรวจสอบสิทธิ์ จะหัดแครกครับ อิอิ
-
ลองใช้โปรแกรม ดัก packet จับดูครับ พวก wpe จับข้อมูลดูครับโปรแกรมมันจะจับว่ามีข้อมูลอะไรส่งไปที่ ip ไหนมั้งครับ http://wpepro.net/index.php?categoryid=2
-
คำถามถัดมา
สมมุติว่าผม url ที่อีเอตรวจสอบสิทธิ์ได้แล้ว
ต่อไปถ้าผมจะเปลี่ยน URL แต่ URL ที่ว่านี้ มันอยู่ใน DLL ผมจะใช้อะไรแก้ได้ครับ
-
คำถามถัดมา
สมมุติว่าผม url ที่อีเอตรวจสอบสิทธิ์ได้แล้ว
ต่อไปถ้าผมจะเปลี่ยน URL แต่ URL ที่ว่านี้ มันอยู่ใน DLL ผมจะใช้อะไรแก้ได้ครับ
คือจะแก้ url ใน dll หรอครับ หรือว่ายังไงครับ
-
ใช่ครับ อีเอใช้ dll ในการตรวจสอบบัญชีบนเว็บไซต์
ผมจะแก้ dll เปลี่ยน url มันดูหน่อย อิอิ
ใช้ notepad แก้ไม่ได้ ตัวหนังสือขาดเกิน dll เสียไปเลยครับ
แต่ถ้าตัวหนังสือเท่ากันใช้ notepad แก้ก็ได้
-
คุณ D-diamond กำลังจะบอกผมว่า Url มันถูกเก็บ ใน dll ใช้ไหมครับจะเปลี่ยนยังไง ใช่ไหมครับ ถ้าใช้ Dll มัน decompile ไม่ได้โดยเฉพาะ dll ที่เขียนจากภาษา C เราต้องใช้ วิธีการแก้ ที่ host file เลยครับ แบบที่พวก Crack โปรแกรมเข้าทำไม่ให้มัน autoupdate คือเปลี่ยนที่อยู่ ip ของ url ครับลองศึกษาจากตรงนี้ดูครับ http://www.picohosting.com/howto/hosts-file
-
คือเราต้อง ทำ php เองบน vps แล้วแก้ host ให้วิ่งมาหาไฟล์ php ที่เราทำไว้เหรอครับ
ยังงี้ยากมาก แล้วผมจะเอา php ของเขามาได้ยังไงครับ ไหนจะดาต้าเบสอีก
ที่แรกนึกว่าจะมีวิธีแก้ dll แบบ notepad ได้โดยที่ไฟล์ไม่เสีย
-
คือเราต้อง ทำ php เองบน vps แล้วแก้ host ให้วิ่งมาหาไฟล์ php ที่เราทำไว้เหรอครับ
ยังงี้ยากมาก แล้วผมจะเอา php ของเขามาได้ยังไงครับ ไหนจะดาต้าเบสอีก
ที่แรกนึกว่าจะมีวิธีแก้ dll แบบ notepad ได้โดยที่ไฟล์ไม่เสีย
แล้วจุดประสงค์ในการเปบี่ยน url เพื่ออะไรหรอครับ ต้องถามก่อนครับ
-
คือผมซื้ออีเอมา แล้วมีความรู้สึกว่ามันไม่คุ้ม เพราะมันล็อกบัญชี แต่ผมเทรดอยู่ 10 กว่าบัญชี มันใช้ได้บัญชีเดียว อยากใช้เพิ่มผมต้องซื้อเพิ่ม
ผมจะแก้อีเอโดยหลอกเซิฟเวอร์ว่า ผมใช้บัญชีนี้อยู่
อย่างเช่น บัญชีที่ผมแอคทีฟหมายเลข 1234
แล้วอีเอจะตรวจสอบไปยังเซิฟเวอร์ผ่านเว็บโดยใช้ url http://www.ea.com/acc.php?id=1234
ก็จะตรวจสอบผ่าน อีเอใช้งานได้
แต่ถ้าผมเอาไปใช้กับบัญชีหมายเลข 5678 อีเอก็จะตรวจสอบโดยใช้ http://www.ea.com/acc.php?id=5678
ก็จะตรวจสอบไม่ผ่าน อีเอใช้งานไม่ได้
ผมเลยจะแก้ url ไม่ว่าใช้บัญชีไหนก็ตาม จะใช้ http://www.ea.com/acc.php?id=1234
อีเอก็จะใช้ทุกบัญชีครับ
ถ้าเป็นกรณีนี้ ผมจะใช้ notepad แก้ dll ไม่ได้ ถ้าใส่ 1234 ลงไปตรงๆ ตัวอักษรจะไม่เท่าของเดิม ไฟล์จะเสียไปเลยครับ
อยากได้วิธีที่มันแก้ได้โดยไฟล์ไม่เสีย อิอิ
-
คุณ D_diamond ลองโหลด โปรแกรม XVI32 http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm แล้วเอา dll มาเปิดในโปรแกรมนี้แล้วแก้ดูครับ โปรแกรมนี้มันจะอ่าน dll ออกเป็น binary เลขฐาน 16 หากไม่ทราบว่า เลขที่คุณต้องการเขียนเป้นฐาน 16 ยังไง ตรง Tab search -> find จะมีเครื่องมือช่วยแปลงให้อยู่ครับ ให้แก้เลขบัญชีจากเดิมเป้นเลขที่ต้องการ แล้ว ลองนำไป test ดูครับวิธีนี้น่าจะใกล้เคียงความจริงที่สุดครับ เพราะ dll compile แล้วจะเป้นไฟลื ไบนารี ต้องแก้แบบ ไบนารี แต่ notepad แก้แบบ text เลย error ครับ
-
ผมลอง neo hex editor ก็เสียเหมือนกันครับ แก้แล้วต้องทำยังไงก่อนหรือเปล่าครับ ผมแก้แล้วเซฟใช้ไม่ได้ครับ
-
จากประสบการณ์ผมเลยนะครับที่แก้ตัว exe มาก่อน ถ้าจะแก้พวกนี้ต้องดูขนาดไฟล์ด้วยครับให้ตอนก่อนแก้ กับ หลังแก้ เท่ากัน ถ้าเกิดแก้ไปแล้วได้ขนาดใหญ่กว่าเดิม ก็ต้องไปหาลบ ตำแหน่งที่ว่าง ออกครับ คือพยายามทำให้ขนาดก่อนและหลังเท่ากัน ซึ่งบางครั้ง exe ที่ผมแก้ก็ใช้งานได้ บางครั้งก็ไม่ได้แล้วแต่ไฟลืด้วยครับแต่ต้องลองดูครับเพื่อ มันได้ขึ้นมาไม่ต้องเสียเงินเพิ่ม
-
ยากจัง อิอิ
แต่แปลก พวกซอฟแวร์คอมพิวเตอร์ที่แครกๆกันขนาดมันก็เล็กลงนะครับ
-
ขอแจมหน่อยครับ มันเรียก ident ที่โฮสนั้นอย่างเดียวเหรอครับ มีเรียกอย่างอื่นมั๊ย
เช่น สัญญาณ เข้าออร์เดอร์หรือ อื่นๆ นอกจาก ident
-
โดยปกติอีเอจะเทรดได้ในตัวมันเอง ไม่ต้องรอซิกจากเซิฟเวอร์ครับ
อีเอที่เทรดเองไม่ได้นี่ผมไม่เคยคิดจะใช้ครับ เชื่อถือไม่ได้
-
โดยปกติอีเอจะเทรดได้ในตัวมันเอง ไม่ต้องรอซิกจากเซิฟเวอร์ครับ
อีเอที่เทรดเองไม่ได้นี่ผมไม่เคยคิดจะใช้ครับ เชื่อถือไม่ได้
ถ้า EA มันเทรดได้ด้วยตัวมันเองอยู่แล้ว ที่มันส่งข้อมูลผ่าน url ออกไปก็เพื่อตรวจสอบ บัญชีว่าอนุญาติหรือไม่อนุญาติเท่านั่เองนิครับ แบบนี้ถ้าเราใช้ host file และไม่ต้องสนใจฐานข้อมูลอะไรเลยให้มันส่งสัญญาณปลอมกลับมามาอนูญาติก็น่าจะใช้ได้นะครับ
-
โดยปกติอีเอจะเทรดได้ในตัวมันเอง ไม่ต้องรอซิกจากเซิฟเวอร์ครับ
อีเอที่เทรดเองไม่ได้นี่ผมไม่เคยคิดจะใช้ครับ เชื่อถือไม่ได้
ถ้า EA มันเทรดได้ด้วยตัวมันเองอยู่แล้ว ที่มันส่งข้อมูลผ่าน url ออกไปก็เพื่อตรวจสอบ บัญชีว่าอนุญาติหรือไม่อนุญาติเท่านั่เองนิครับ แบบนี้ถ้าเราใช้ host file และไม่ต้องสนใจฐานข้อมูลอะไรเลยให้มันส่งสัญญาณปลอมกลับมามาอนูญาติก็น่าจะใช้ได้นะครับ
นั่นแหละครับ ที่ผมอยากรู้ แบบนี้โกงได้หลายวิธีเลย วิธีที่ง่ายที่สุด น่าจะเป็น host file นี่แหละครับ ทีนี้ท่านต้องไปจับแล้วล่ะว่ามันส่งอะไรกลับมา
ส่วนแก้ dll ต้องให้ พวก binary หรือ hex editor ครับ ต้องหา address ของตัวที่เราจะแก้ให้เจอจริงๆ ไม่งั้นไฟล์เสียครับ(สมัยเรียน โกงเกมส์บ่อย 555)
-
แก้ยังไงไฟล์ถึงไม่เสียครับ ผมใช้ hex editor ก็เสีย
-
แก้ยังไงไฟล์ถึงไม่เสียครับ ผมใช้ hex editor ก็เสีย
ต้องแปลงตัวที่เราจะแก้ไปเป็น hex ก่อนครับ แล้วหาให้เจอใน file ทั้ง เดินหน้า ถอยหลัง บนลงล่าง หรือ ล่างขึ้นบน
เช่น ฟฟฟ แปลงเป็น hex ได้ 00 0f 98 53 สมมุติน๊ะ
ท่านต้องหาให้เจอ มันจะมี 4 แบบคือ
00 0f 98 53
53 98 0f 00
00
0f
98
53
53
98
0f
00
และในแต่ละแบบอาจอยู่คนละบรรทัดกันได้ด้วยน๊ะเช่น
00 0f
98 53
อะไรแบบนี้ครับ ต้องใช้ความพยายามพอสมควรครับ
-
ขอถามตรงข้ามกับประเด็นหัวข้อหน่อยครับ
คือ ถ้าเราจะหาวิธีป้องกัน EA เราเอง แบบที่เขาทำขายกันอยู่เนี่ย พอจะแหล่งข้อมูลให้ศึกษาบ้างไหมครับ
-
คุณ d_diamond ขอตัว dll ผมได้ไหมครับ เพราะ ผมลองแก้ dll ที่เขียนเอง show ข้อความสามารถทำได้ ไม่ error ผมอยากขอลองดูหน่อย
-
ขอถามตรงข้ามกับประเด็นหัวข้อหน่อยครับ
คือ ถ้าเราจะหาวิธีป้องกัน EA เราเอง แบบที่เขาทำขายกันอยู่เนี่ย พอจะแหล่งข้อมูลให้ศึกษาบ้างไหมครับ
คุณต้องเขียน Logic การเข้ารหัสเอง โดยที่ไม่ให้ใครรู้ มีรู้ map อยู่คนเดียวการเข้ารหัสแต่ละครั้งอย่าให้ซ้ำกัน
โอ้วโครงการร้อยล้าน
-
ตัวอย่างเป็นอีเอ Megadroid นะครับ
จากภาพที่ 1 ดูที่ผมขีดเส้นใต้ไว้ ...MegaDroid...
ภาพที่ 2 สมมุติว่าผมแก้เป็น ...PipJet ... เว้นช่องว่างไว้เพื่อให้ตัวอักษรมีเท่าเดิม แล้วเซฟ แบบนี้ไฟล์ไม่เสีย
แต่ถ้าผมแก้เป็น ...PipJet... ถ้าลบช่องว่างออก จำนวนตัวอักษรจะลดลง มันเสียทันทีเลย หรือจะเพิ่มตัวหนังสือให้ยาวขึ้น มันก็เสียครับ
.................................
อีเอตัวนี้มันแปลก แก้ในโค้ด mq4 ก็ไม่ได้
Activate("1.38", AccountNumber(), AccountCurrency(), AccountCompany(), AccountServer(), IsDemo(), ReceiptCode, 1);
Activate("1.38", AccountNumber(), AccountCurrency(), AccountCompany(), AccountServer(), true, ReceiptCode, 1);
แก้แบบนี้เสีย
Activate("1.38",1242, AccountCurrency(), AccountCompany(), AccountServer(), IsDemo(), ReceiptCode, 1);
แก้แบบนี้ มันบอกเลขบัญชีผิด
ปล.แก้ทั้ง 2 แบบ อีเอจะไม่ไปตรวจสิทธิ์บนเว็บเลย เลยต้องไปหาวิธีแก้ใน dll ครับ อิอิ
-
ผมเช็กแล้ว จาก dll ของ megadroid แล้วก็ลองเขียน dll ทีเรียก url เทียบแล้วด้วยครับ ผมปรากฏดังนี้ครับ
&code=..&type=..&serv=..&bro=...&curr=..&bal=...&volume=....&lot=...&acct=..&base=..:...MegaDroid...file=...=
ส่วนที่คุณ d-diamond หาเจอเป็นส่วนของ url จริงๆๆครับ แล้วที่คุณ d-diamond ไปเปลี่ยน MegaDroid ไปเป็น PipJet แล้วไม่ error เพระาว่า ขนาด byte หลังแก้เท่ากับตอนเริ่มต้นเพราะคุณใส่ 00 ลงไปจนเท่าเดิม แต่ไม่ทำงานเพราะว่า MegaDroid ที่คุณ D-diamond เป็น Path ของเวบครับแก้ไปแล้วเลย link ไปไม่ได้ครับ เพราะไม่มีชื่อที่อยู่นี้จริง ที่นี้มาดูต่อครับว่ามันเก็บ account ที่ไหนมันเก็บไวที่นี้ครับ &acct=..&base ไอตรงจุด 2 จุดนี้หละครับที่มันเก็บไว แล้วที่มันแสดงเป็นจุดเพราะอะไรรู้ไหมครับ เพราว่ามันใช้ตัวแปร เป็นเก็บข้อมูลครับ ไม่ได้ พิมพ์เลขตรงๆๆ ดู ทั้งหมดได้เลยครับ เป็น path ของเวบทั้งนั่น หลังเครื่องหมายเท่ากับเป็น .. หมดเลย เพระามันใช้ตัวแปรเก็บทั้งหมดครับ เราจึงไม่สามารถแก้ด้วยวิธีนี้ได้ครับ แต่ยังมีอีกวิธีที่น่าลอง คือ แบบการโกงเกมที่คุณ Linconz ว่าครับ คือการเรียกค่าที่เก็บอยู่ในหน่วยความจำตอนโปรแกรมรันขึ้นมาแก้ ครับแต่ผมไม่รู้ว่าจะได้ผลแค่ไหนนะครับ ลอง หาโปรแกรม พวก Tsearch หรือ gamehack 2.0 มาลองใช้หาดูครับ
-
ถ้ายังงั้นก็ต้องแก้ทุกครั้งที่รัน มันก็ไม่ใช่การแครกอีเอ อิอิ
ที่ผมงงอีกอย่างคือทำไมแก้ใน mq4 ก็ไม่ได้ ทั้งที่ค่าในตัวแปรมันก็รับมาจาก mq4
ไม่ใช่แค่ megadroid นะครับ หลายตัวเลย
อย่างเช่นอีเอ Hyper EA ผมลบคำสั่ง AccountNumber() ทิ้งหมดเกลี้ยงไม่เหลือแล้วแน่นอน
แต่มันดันรีเทิร์น error code ออกมาเป็น 1242 แล้วมันรู้เลขบัญชีผมได้ไง
-
ถ้ายังงั้นก็ต้องแก้ทุกครั้งที่รัน มันก็ไม่ใช่การแครกอีเอ อิอิ
ที่ผมงงอีกอย่างคือทำไมแก้ใน mq4 ก็ไม่ได้ ทั้งที่ค่าในตัวแปรมันก็รับมาจาก mq4
ไม่ใช่แค่ megadroid นะครับ หลายตัวเลย
อย่างเช่นอีเอ Hyper EA ผมลบคำสั่ง AccountNumber() ทิ้งหมดเกลี้ยงไม่เหลือแล้วแน่นอน
แต่มันดันรีเทิร์น error code ออกมาเป็น 1242 แล้วมันรู้เลขบัญชีผมได้ไง
ตรงนี้ผมไม่แน่ใจนะครับ แต่ถ้าหากว่าตอนชื้อ กับ เจ้าของเค้าของแล้วเค้าให้ระบุ account number ให้เค้าด้วยก็อาจจะเป้นไปได้ว่า เค้านำมันไปใส่ใน code ของ dll แล้ว compile แล้วส่งทั้ง EA และ dll มาให้คุณ ครับ คือเค้ายอมเสียเวลา 1-2 นาทีตอน compile dll ใหม่ให้คุณแต่ป้องกันไม่ให้ dll ตัวนี้ไปใช้ที่ไหนต่อได้ก้เป้นไปได้ครับ เพราะ เวลาคุณส่งค่า account number เข้าไปมันก็ต้องไปเช็กอีกทีว่าตรงกับ เลข ที่ถูกใส่ไวใน dll หรือเปล่าครับ
-
ถ้ายังงั้นก็ต้องแก้ทุกครั้งที่รัน มันก็ไม่ใช่การแครกอีเอ อิอิ
ที่ผมงงอีกอย่างคือทำไมแก้ใน mq4 ก็ไม่ได้ ทั้งที่ค่าในตัวแปรมันก็รับมาจาก mq4
ไม่ใช่แค่ megadroid นะครับ หลายตัวเลย
อย่างเช่นอีเอ Hyper EA ผมลบคำสั่ง AccountNumber() ทิ้งหมดเกลี้ยงไม่เหลือแล้วแน่นอน
แต่มันดันรีเทิร์น error code ออกมาเป็น 1242 แล้วมันรู้เลขบัญชีผมได้ไง
ตรงนี้ผมไม่แน่ใจนะครับ แต่ถ้าหากว่าตอนชื้อ กับ เจ้าของเค้าของแล้วเค้าให้ระบุ account number ให้เค้าด้วยก็อาจจะเป้นไปได้ว่า เค้านำมันไปใส่ใน code ของ dll แล้ว compile แล้วส่งทั้ง EA และ dll มาให้คุณ ครับ คือเค้ายอมเสียเวลา 1-2 นาทีตอน compile dll ใหม่ให้คุณแต่ป้องกันไม่ให้ dll ตัวนี้ไปใช้ที่ไหนต่อได้ก้เป้นไปได้ครับ เพราะ เวลาคุณส่งค่า account number เข้าไปมันก็ต้องไปเช็กอีกทีว่าตรงกับ เลข ที่ถูกใส่ไวใน dll หรือเปล่าครับ
hyper ea ผมไม่แน่ใจว่า dll ของใครของมันหรือเปล่า
แต่ Megadroid อันเดียวกันใช้ทั้งโลกนะครับ
ถ้าผมแก้ accountnumber ตรงนี้ มันจะฟ้องเลย Invalid Account Number
Activate("1.38", AccountNumber(), AccountCurrency(), AccountCompany(), AccountServer(), IsDemo(), ReceiptCode, 1);
คำสั่ง Symbol() ก็เหมือนกันครับ ลบทิ้งหมดแล้วมันยังรู้ว่าใช้ผิดคู่ มันรู้มากจริงๆ อิอิ
-
ถ้ายังงั้นก็ต้องแก้ทุกครั้งที่รัน มันก็ไม่ใช่การแครกอีเอ อิอิ
ที่ผมงงอีกอย่างคือทำไมแก้ใน mq4 ก็ไม่ได้ ทั้งที่ค่าในตัวแปรมันก็รับมาจาก mq4
ไม่ใช่แค่ megadroid นะครับ หลายตัวเลย
อย่างเช่นอีเอ Hyper EA ผมลบคำสั่ง AccountNumber() ทิ้งหมดเกลี้ยงไม่เหลือแล้วแน่นอน
แต่มันดันรีเทิร์น error code ออกมาเป็น 1242 แล้วมันรู้เลขบัญชีผมได้ไง
ตรงนี้ผมไม่แน่ใจนะครับ แต่ถ้าหากว่าตอนชื้อ กับ เจ้าของเค้าของแล้วเค้าให้ระบุ account number ให้เค้าด้วยก็อาจจะเป้นไปได้ว่า เค้านำมันไปใส่ใน code ของ dll แล้ว compile แล้วส่งทั้ง EA และ dll มาให้คุณ ครับ คือเค้ายอมเสียเวลา 1-2 นาทีตอน compile dll ใหม่ให้คุณแต่ป้องกันไม่ให้ dll ตัวนี้ไปใช้ที่ไหนต่อได้ก้เป้นไปได้ครับ เพราะ เวลาคุณส่งค่า account number เข้าไปมันก็ต้องไปเช็กอีกทีว่าตรงกับ เลข ที่ถูกใส่ไวใน dll หรือเปล่าครับ
อีกอย่างนึง สมมุติเขาล็อกเลขบัญชีไว้ใน DLL จริง ยังไงก็ต้องเอาไปเทียบกับคำสั่ง AccountNumber() อยู่ดีนะครับ ซึ่งคำสั่งนี้ผมลบทิ้งเกลี้ยงหมดแล้ว
-
แล้วตัว mega ที่แจกในนี้ล่ะครับ มันไม่เรียก dll เหรอ
ผมไม่เคยโหลดไปใช้ซักที เห็นมีคนโหลด ไปกันเยอะนี่
กับตัวที่ท่าน D ซื้อมันคนละเวอร์ชั่นกันเหรอ
-
ตัวที่เขาแจกกันคงแครกมาแล้วครับ ผมก็ไม่เคยเอาไปเทียบกันว่ามันเทรดเหมือนกันรึเปล่า
ส่วนที่ตั้งกระทู้ถามนี่เพื่อความรู้ครับ megadroid กับ hyper ea เป็นเพียงอีเอตัวอย่าง
Hyper EA นี่มันเช็กเลขบัญชีจาก DLL เองได้เลย ทำไงหว่า
#import "InternalDll.dll"
int CloseByEndBarriersVER20Pro(int a0, int a1, int a2, int a3, double a4, double a5, int a6, int a7, int a8, double a9, double a10, double a11);
int CheckServerConnectionVER23(int a0);
int CheckAccountNumber();
-
ลองดูนะครับ มันรู้ได้ยังไง
โค้ดมีเพียงแค่นี้ ผมเขียนขึ้นมาใหม่
#import "InternalDll.dll"
int CheckAccountNumber();
#import
void init()
{
int li_8 = CheckAccountNumber();
Comment("Account Number = ",li_8);
}
-
ถ้ายังงั้นก็ต้องแก้ทุกครั้งที่รัน มันก็ไม่ใช่การแครกอีเอ อิอิ
ที่ผมงงอีกอย่างคือทำไมแก้ใน mq4 ก็ไม่ได้ ทั้งที่ค่าในตัวแปรมันก็รับมาจาก mq4
ไม่ใช่แค่ megadroid นะครับ หลายตัวเลย
อย่างเช่นอีเอ Hyper EA ผมลบคำสั่ง AccountNumber() ทิ้งหมดเกลี้ยงไม่เหลือแล้วแน่นอน
แต่มันดันรีเทิร์น error code ออกมาเป็น 1242 แล้วมันรู้เลขบัญชีผมได้ไง
ตรงนี้ผมไม่แน่ใจนะครับ แต่ถ้าหากว่าตอนชื้อ กับ เจ้าของเค้าของแล้วเค้าให้ระบุ account number ให้เค้าด้วยก็อาจจะเป้นไปได้ว่า เค้านำมันไปใส่ใน code ของ dll แล้ว compile แล้วส่งทั้ง EA และ dll มาให้คุณ ครับ คือเค้ายอมเสียเวลา 1-2 นาทีตอน compile dll ใหม่ให้คุณแต่ป้องกันไม่ให้ dll ตัวนี้ไปใช้ที่ไหนต่อได้ก้เป้นไปได้ครับ เพราะ เวลาคุณส่งค่า account number เข้าไปมันก็ต้องไปเช็กอีกทีว่าตรงกับ เลข ที่ถูกใส่ไวใน dll หรือเปล่าครับ
อีกอย่างนึง สมมุติเขาล็อกเลขบัญชีไว้ใน DLL จริง ยังไงก็ต้องเอาไปเทียบกับคำสั่ง AccountNumber() อยู่ดีนะครับ ซึ่งคำสั่งนี้ผมลบทิ้งเกลี้ยงหมดแล้ว
ถึงลบออก แต่เงื่อนไข เปรียบเทียบใน dll ยังอยู่ครับ ถึงไม่ใส่ค่าเข้าไปมันก็ยังเปรียบเทียบอยู่ดีครับ
-
แล้วมันรู้เลขบัญชีจริงๆของเราได้ยังไงละครับ ถ้าไม่ใช้คำสั่ง AccountNumber()
ท่านแอดมินลองดูโค้ดโพสข้างบนก่อนครับ มีแค่ 2 บรรทัด
-
มันอาจจะ check จาก terminal.exe ก็ได้มั๊งครับ ผมก็ไม่ค่อยรู้เรื่องการเขียนโปรแกรมซักเท่าไหร่
เพราะว่า dll สามารถเรียกใช้งานฟังชั่นอื่นที่ทำงานร่วมกับตัว วินโดว์ได้ อันนี้ต้องรอท่าน admin
-
หมายถึงเช็กข้อความบน Title Bar แล้วไปตัดหาเลขบัญชีเอาเหรอครับ
ถ้าทำได้ก็รู้หมดเลย เลขบัญชี โบรกเกอร์ เดโมหรือเรียล กราฟคู่ไหน กี่นาที หลอกมันไม่ได้เลย
-
ผมว่าน่าจะได้น๊ะครับ ถ้ามันเช็คแบบนี้จริงๆ ด้วยการ เขียน terminal.exe ขึ้นมาอีกอัน เพื่อแก้ไขค่าที่มันเรียกอ่าน แล้วก็ รีเนมอันเก่าซะ
ซึ่งจริงๆ เรายังไม่รู้ว่ามันเช็คจากตรงนี้จริงๆหรือป่าว นี่แค่สันนิษฐานไว้ก่อน เพราะดูจากโค๊ดที่ท่านให้มาแล้ว ไม่มีการเรียกฟังก์ชั่นเช็ค acc จาก mt4 เลย
-
จากโค๊ดที่ท่านให้มา ลอง เอา vb หรือ vc++ เขียนโปรแกรม terminal.exe ขึ้นมาซักตัวซิครับเอาแบบ title bar เหมือนเลย แล้ว ลองเปลี่ยนชื่อ ตัวเก่าเป็นชื่อใหม่แล้วลองรันโค๊ด mt4 ดูว่า มันอ่านได้ค่าต่างกันหรือป่าว
-
จากโค๊ดที่ท่านให้มา ลอง เอา vb หรือ vc++ เขียนโปรแกรม terminal.exe ขึ้นมาซักตัวซิครับเอาแบบ title bar เหมือนเลย แล้ว ลองเปลี่ยนชื่อ ตัวเก่าเป็นชื่อใหม่แล้วลองรันโค๊ด mt4 ดูว่า มันอ่านได้ค่าต่างกันหรือป่าว
ผมเขียนเป็นซะที่ไหนครับ อิอิ
แต่ทั้งวันมานี้ผมรัน terminal อยู่ 3 ตัว แบคเทสอีเออื่นไปด้วย DLL มันไม่รวนครับ มันอ่านถูก ถ้าเขียนได้แบบนี้คงไม่ต้องกลัวโดนแครกแล้ว
-
เค้าใช้การอ่านค่าจาก handle ของโปรแกรมครับ จากรูปผมใช้เครื่องมือ spy++ ใน visual studio แสดงตัวอย่างให้ดูครับว่ามันอ่านค่าออกมาได้ แต่ในความเป้นจริงเค้าใช้หลักการเดียวโปรแกรม โกงเกมนั่นหละครับ ที่ชี้ไปยังไฟล์ exe แล้วค้นหาค่าที่เก็บอยู่ในหน่วยความจำของโปรแกรมได้ครับ โดยที่ภายในโปรแกรมหนึ่งลำดับการเก็บข้อมูลไม่เปลี่ยนแปลง ถึงแม้ว่าตำแหน่งของ memory ที่ได้จาก ram ของเครื่องจะเปลี่ยนแต่ตำแหน่งการเก็บข้อมูลในโปรแกรมไม่เปลี่ยนครับ กล่าวคือ โปรแกรม a.exe ใช้หน่วยความจำจำหน่วน 100 หน่วย โดยที่หน่วยที่ 3 ใช้เก็บชื่อ โปรแกรม ในเวลาใช้งานจริง เมื่อเราใช้เปิดโปรแกรม a มันจะไปจองหน่วยความจำจาก ram มา 100 หน่วยโดยที่หน่วยแรกเร่ิมต้นที่ 00000100 ตัวสุดท้ายอยู่ที่ 00000200 ตำแหน่งที่เก็บชื่อของโปรแกรมจะอยู่ที่ 00000103 แต่หากโปรแกรมจองหน่วยความจำเริ่มต้นได้ที่ 00000150 ตัวสุดท้ายอยู่ที่ 00000250 ตำแหน่งที่เก็บชื่อของโปรแกรมจะอยู่ที่ 00000153 เป้นต้นดังนั่นถ้าเราอยากได้ค่าจาก mt4 มาใช้ต้องศึกษาครับว่าตำแหน่งที่เก็บข้อมูลพวกนี้อยู่ที่ตำแหน่งเท่าไรของ หน่วยความจำที่โปรแกรมเรียกใช้งานครับ
-
ท่านแอดมินพอจะเขียนฟังก์ชั่น DLL แบบเขาได้รึเปล่าครับ ถ้าทำได้ผมว่ากันแครกได้สูงว่าพวก Protection ทุกยี่ห้อเลย
แล้ว DLL นี่ใช้โปรแกรมอะไรเขียนภาษาไหนครับ จะลองหัดดูบ้าง เอาแบบเขียนแล้ว decompile ไม่ออก
-
ท่านแอดมินพอจะเขียนฟังก์ชั่น DLL แบบเขาได้รึเปล่าครับ ถ้าทำได้ผมว่ากันแครกได้สูงว่าพวก Protection ทุกยี่ห้อเลย
แล้ว DLL นี่ใช้โปรแกรมอะไรเขียนภาษาไหนครับ จะลองหัดดูบ้าง เอาแบบเขียนแล้ว decompile ไม่ออก
DLL ใช้ visual c++ เขียนครับ ส่วนเรื่องเขียนต้องลองครับผมไม่เคยลองเขียนให้มันเช็กข้อมูลของโปรแกรม แต่ผมเคยเขียนว่า ถ้าเอา EA ไปรันบน HDD ลูกอื่นที่ไม่ใช้ลูกนี้ให้ windows มัน shutdown หรือ log off ตัวเองไปเลยครับ
-
decompile ไม่ออกชัวนะครับ visual c++ เวอร์ชั่นไหนดีครับ โปรแกรมเล็กๆหน่อย
ถามต่ออีกอย่าง เคยเห็นเวลาเขาแครก DLL เขาจะตัด DLL เหลือขนาดเล็กนิดเดียว แล้วสร้างเป็นไฟล์ .DAT มาแทน
แบบนี้ใช้เทคนิคอะไรครับ ทำไมทำแบบนี้แล้วแครกอีเอได้
-
decompile ไม่ออกชัวนะครับ visual c++ เวอร์ชั่นไหนดีครับ โปรแกรมเล็กๆหน่อย
ถามต่ออีกอย่าง เคยเห็นเวลาเขาแครก DLL เขาจะตัด DLL เหลือขนาดเล็กนิดเดียว แล้วสร้างเป็นไฟล์ .DAT มาแทน
แบบนี้ใช้เทคนิคอะไรครับ ทำไมทำแบบนี้แล้วแครกอีเอได้
เท่าที่ผมเห็นนะครับ EA ที่มันสามารถตัดเอา DLL ออกไปได้ หรือเขียน DLL ใหม่ให้เหลือขนาดเล็ก ลง ส่วนใหญ่แล้ว มันเป้น EA ที่ตัวเนื้อ EA ก็ทำงานได้ในตัวมันอยู่แล้วแต่ใช้ Dll เป้นตัวช่วยป้องกันหรือประมวลผลอะไรบ้างอย่างเล็กน้อยเท่านั่นเอง คนที่ crack ก็ตัด dll ออกไปแล้ว แล้วทำ dll ปลอม เพื่อหลอกให้ EA ทำงานหรือว่าจะแก้ที่เนือ EA ให้ทำงานได้ในตัวมันเองเลยก็มีนิครับ ส่วน file DAT ก็เป็นที่เก้บข้อมูลที่จำเป้นให้ EA เรียกขึ้นมาอ่านได้เท่านั่นเองครับ DAT เป็นการ save แบบไบนารี เวลาเอาพวกโปรแกรม notepad เปิดจะเป้นตัวที่อ่านไม่ออกเท่านั่นเอง ส่วนข้อมูลที่เขียนก็เป้นข้อมูลที่ใช้หลอกให้ EA ทำงานครับ เอาตรงๆถ้าเรารู้การทำงานของ EA ทั้งหมด มันก็ย่อมรู้วิธีแก้ไขให้มันทำงานได้ครับ อย่างตัวอย่างที่คุณว่ามาคือมี dll ที่เล็กลง แล้วมีไฟล์ dat เพิ่มเข้ามา เวลา EA เรียก dll ตัวที่มีขนาดเล็กลง ใน Dll มีฟังก์ชั่นให้ไปอ่านข้อมูลสำคัญมาจาก ไฟล์ dat จากนั่นก็ส่งค่าคืนมาให้ EA ครับค่าที่ส่งคือค่าที่คน crack เข้าทราบอย่างแน่นอนแล้วว่าต้องส่งอะไรกลับออกมาบ้าง EA ถึงทำงานได้ครับ
-
คือผมงงที่ว่าทำไมในเมื่อเขาแก้ DLL ได้ ทำไมไม่แก้ DLL อย่างเดียวเลย จำเป็นอะไรทำไมต้องมี DAT โผล่มาอีกไฟล์
แล้วเท่าที่เห็น mq4 เทรดเองไม่ได้ครับ เงื่อนไขเปิดปิดออเดอร์จะส่งมาจาก DLL หมดเลย
แถมพอแครกออกมาเทรดเหมือนของแท้เกือบจะเป๊ะเลย แต่ไม่ยังเป๊ะ
-
มีคำถามอีกแล้วครับ
ถ้าเราจะเอา DLL คนอื่นมาใช้ เราจะสามารถรู้ได้ยังไงครับ ว่า DLL ตัวนั้น มีฟังก์ชั่นอะไรให้ใช้บ้าง และเป็นฟังก์ชั่นชนิดไหน ต้องการพารามิเตอร์กี่ตัว
-
คือผมงงที่ว่าทำไมในเมื่อเขาแก้ DLL ได้ ทำไมไม่แก้ DLL อย่างเดียวเลย จำเป็นอะไรทำไมต้องมี DAT โผล่มาอีกไฟล์
แล้วเท่าที่เห็น mq4 เทรดเองไม่ได้ครับ เงื่อนไขเปิดปิดออเดอร์จะส่งมาจาก DLL หมดเลย
แถมพอแครกออกมาเทรดเหมือนของแท้เกือบจะเป๊ะเลย แต่ไม่ยังเป๊ะ
เพื่อความง่ายและรวดเร็วครับ หากจะแก้ dll หรือ exe จริงต้องรู้จักภาษาแอสเชมบี ดีพอตัวครับ ซึงอาจจะใช้เวลานานกว่าสร้าง EA ใหม่สักตัวด้วยซ้ำไปครับ อย่างพวกที่ crack ก็ใช้ แอมเชมบลี เปลี่ยนทางเดินของโปรแกรมครับ บางโปรแกรม จะหมดอายุก้แก้ไม่ให้มันเช็กเวลาหมดอายุแทนครับ แตทุกอย่างต้องใช้เวลา
-
มีคำถามอีกแล้วครับ
ถ้าเราจะเอา DLL คนอื่นมาใช้ เราจะสามารถรู้ได้ยังไงครับ ว่า DLL ตัวนั้น มีฟังก์ชั่นอะไรให้ใช้บ้าง และเป็นฟังก์ชั่นชนิดไหน ต้องการพารามิเตอร์กี่ตัว
ลองโหลด PE EXPLORER ลองใช้เปิดแล้ว Disassembler ไฟล์ dll ดูครับมันจะมีรายละเอียดบอกมากพอผมควร
-
ลองดูแล้วมันเป็นแบบนี้ครับ มีแต่ชื่อฟังก์ชั่นอย่างเดียว
-
มันมองได้แต่ชื่อฟังก์ชั่น ไม่มีบอกตำแหน่งพารามิเตอร์ งั้นคงต้องลำบากหน่อยหละครับเวลาใช้งานจริงๆๆ ที่ต้องเดาเอา เพราะขนาด libary ของโปรแกรมที่มีคนเขียนขายกันในเน็ตเค้าต้องให้ reference มาให้เลยครับไม่งั้นก็ใช้งานกันไม่ถูกครับ
-
รบกวนขอชื่อ โปรแกรม+เวอร์ชั่น ที่ใช้เขียนโค้ด DLL ภาษาอะไรก็ได้ ที่มัน decompile ไม่ออกหน่อยครับ
เห็นเขาว่าถ้าเขียนกับ .net นี่มันจะ decompile ได้
พอดีเขียนอีเอตัวใหม่เสร็จแล้ว ว่าจะลองทำขายดูซักทีครับ
-
visual c++ 2010 เลยครับ แล้วเขียนด้วย MFC นะครับจะไม่มีปัญหาแล้วแกะ ไม่ออกแน่ๆๆ พวก .net ที่มันออกเพราะ มันต้องผ่านสถาปัตยกรรม .net ครับเหมือน java พวกนี้จะ decompile ออกมหดครับ จริงๆๆ c++ ธรรมดาก็เขียนได้แต่ปัญหาคือเวลานำไปใช้ข้ามเครื่องมันจะมีปัญหาบางครั้งจะเอาไปใช้ไม่ได้เพราะ เครื่องที่นำไปใช้งานมี libary ไม่ครบครับ
-
ขอบคุณครับ แล้ว MFC นี่มันคืออะไร เดี๋ยวผมลองไปเขียนดูก่อน ถ้าเขียนไม่ถูกมาถามต่อนะครับ
ใช้รุ่น express ได้รึเปล่าครับ เขียน dll ฟังก์ชั่นธรรมดา ไม่ได้ยุ่งกับวินโดว์หรืออื่นๆ
-
ขอบคุณครับ แล้ว MFC นี่มันคืออะไร เดี๋ยวผมลองไปเขียนดูก่อน ถ้าเขียนไม่ถูกมาถามต่อนะครับ
ใช้รุ่น express ได้รึเปล่าครับ เขียน dll ฟังก์ชั่นธรรมดา ไม่ได้ยุ่งกับวินโดว์หรืออื่นๆ
express ใช้ไม่ได้ครับไม่มี MFC ( Microsoft founddation class ) DLL ก็คือการเขียน ฟังก์ชั่นของ ภาษา C++ ครับแต่แยกออกมาเป็นเนื้อไฟล์ต่างหาก
-
หา visual c++ 2010 ไม่เจอเลยครับ เจอแต่ express
อันนี้ใช้ได้รึเปล่าครับ
Microsoft Visual Studio 2010 Professional[Full] 2.2 GB
Microsoft Visual Studio Professional 2012 RC[Full] 1.4 GB
sharpdevelop อันนี้ไม่กี่ MB เห็นว่าเขียน c++ ได้ ใช้แทนได้ไหมครับ
http://www.icsharpcode.net/OpenSource/SD/Features.aspx
-
หา visual c++ 2010 ไม่เจอเลยครับ เจอแต่ express
อันนี้ใช้ได้รึเปล่าครับ
Microsoft Visual Studio 2010 Professional[Full] 2.2 GB
Microsoft Visual Studio Professional 2012 RC[Full] 1.4 GB
sharpdevelop อันนี้ไม่กี่ MB เห็นว่าเขียน c++ ได้ ใช้แทนได้ไหมครับ
http://www.icsharpcode.net/OpenSource/SD/Features.aspx
http://thepiratebay.se/torrent/7360549/Visual_Studio_2010_Ultimate.iso อันนี้ครับ
-
ต้องใช้รุ่นใหญ่สุดเลยเหรอครับ นึกว่าใช้รุ่นเล็กๆประหยัดเนื้อที่หน่อย
แล้ว Visual Studio นี่ไม่ใช่ .NET เหรอครับ ผมนึกว่าอันเดียวกันซะอีก
-
ต้องใช้รุ่นใหญ่สุดเลยเหรอครับ นึกว่าใช้รุ่นเล็กๆประหยัดเนื้อที่หน่อย
แล้ว Visual Studio นี่ไม่ใช่ .NET เหรอครับ ผมนึกว่าอันเดียวกันซะอีก
Visual studio มันรวมทั้งหมดครับ ตั้งแต่รุ่น 2008 มันไม่มีแยกเป้นตัวเหมือนรุ่น 2003 แล้วครับ แล้วโหลดตัวใหญ่ไปเลยครับเพราะมันใช้เนื้อต่างกันไม่มาก เราเลือกลงได้แต่มันจะมีความสามารถที่ให้รวมเนื้อ libary เข้าไปในไฟลื dll เลยครับตรงนี้มีประโยชน์เพราะ dll ที่ได้ไม่ต้องไปลง Visual c++ 2010 runtime อีกมันประหยัดเวลาคุณเขียนเสร็จแล้วขายหากเจอลูกค้าที่ไม่ค่อยรู้เรื่องคอมจะไม่เหนื่อยเท่าไรเวลาต้องมา support ครับ
-
ยัง งง งง อยู่ครับ visual studio นี้มันสามารถเลือกได้ว่าจะเขียน .net หรือจะเขียน mfc เหรอครับ
ถ้าเขียนแบบ .net จะดีคอมไพล์ได้ แต่ถ้า mfc ดีคอมไพล์ไม่ได้ ยังงี้รึเปล่าครับ งงมาก
-
ยัง งง งง อยู่ครับ visual studio นี้มันสามารถเลือกได้ว่าจะเขียน .net หรือจะเขียน mfc เหรอครับ
ถ้าเขียนแบบ .net จะดีคอมไพล์ได้ แต่ถ้า mfc ดีคอมไพล์ไม่ได้ ยังงี้รึเปล่าครับ งงมาก
visual studio เป้นชื่อเรียก ชุดพัฒนาโปรแกรมของ Microsoft ในสมัยก่อนถ้าเรามีแผ่น Visual studio แล้วติดตั้งมันจะมี Visual Basic Visual C++ Visual j# แยกออกมาเป็นโปรแกรมเป้นต้น พอถึงปี 2008 Microsoft ออก Visual studio 2008 ออกมา สิ่งที่แตกกต่างจากเมื่อก่อนคือน ในสมัยก่อนถ้าเราลง Visual studio มันจะแยกเป้นตัว IDE ของแต่ละโปรแกรมกล่าวคือ Basic ก็มี IDE ของ Basic ตัว c# ก็มีตัว IDE ของ C# ตัว c++ ก็มี IDE ของ c++ แต่พอตัวปี 2008 ออกมา Microsoft ทำให้เหลือ IDE ตัวเดียวแต่สามารถเลือกเขียนโปรแกรมทุกตัวที่มีอยู่ได้ครับ ที่นี้คุณถามว่า ถ้าเขียนแบบ .net มัน Decompile ได้ใช้ไหมครับ ตอบว่าใช้ครับเพราะโปรแกรมที่เขียนจาก .net ทุกตัวไม่ว่าจะเขียนด้วย Basic c# c++ j# เวลาทำงานจริงมันจะมีตัว .netframework เป้นตัวแปลงคำสั่ง ทำงานให้เป้น native อีกชั่นหนึ่ง ครับซึ่งเหมือน Java เราต้องมี java runtime แปลงคำสั่งเป้น native อีกครั้งหนึ่งครับแล้วตัว .netframework กับ java runtime มีคนแกะ code การทำงานได้แล้วได้สร้างมาเป้น decompiler ได้แล้วครับดังนั่นโปรแกรมที่พัฒนาด้วย .net หรือ java ถึงสามารถแปลงกลับเป้น code ได้โดยเราต้องหาร decompiler ให้ตรงกับภาษาและ version ที่ใช้พัฒนาครับ ที่นี้มาถึง MFC เป็น libary ที่ Microsoft พัฒนาขึ้นมาครั้งแรกเมื่อ 20 กว่าปีก่อนเพื่อใช้ ครอบ libary ของ ภาษา c/c++ อีกครั้งชั้นหนึ่ง จุดประสงค์ที่สร้างขึ้นมาเพื่ออำนวยความสะดวกในการพัฒนา GUI บน windows ครับเพราะในยุกแรกการจะสร้างหน้าต่าง windows ได้สักอันเราจ้องเขียน code เป้น 10 บรรทัด ที่นี้ code ที่ได้จากการ compile โปรแกรมที่พัฒนาจาก libary MFC จะเป้น Native Code ซึ่งมัน Decomplie ให้กลับเป้น code แบบดังเดิมไม่ได้ ด้วยหลายๆๆสาเหตุ แต่ hacker สามารถ Crack โปรแกรม ได้โดยการไล่ดู assembly เหมือน Crack ที่เราใช้ๆๆกันอยู่ครับ แล้วที่ผมแนพให้ใช้ MFC เพราะตัว MT4 ก็สร้างจาก MFC เหมือนกันครับตรงนี้ทราบได้จากเคยเอา MT4 ไปรันบน Linux มันเรียกหา DLL RUNTIME ของ MFC ครับ
-
โอ้ อธิบายได้เนียนมากครับ
ตอนนี้ลงเสร็จแล้ว ผมจะเขียน DLL ด้วย MFC เลือกแบบนี้ถูกหรือเปล่าครับ
อันนี้ลง vs 2012 ultimate พอดีขนาดเล็กกว่า 2010 แถมใช้วิน 8 อยู่พอดีเลยลองของใหม่ซะเลย อิอิ ( ของเก่าก็ไม่เคยลอง )
-
ใช้ครับ
-
งงทำอะไรไม่ถูกเลยครับ มันมีหลายไฟล์มาก ไม่รู้อะไรเป็นอะไร
ช่วยแนะนำหน่อยครับว่าผมต้องไปตำราเรื่องอะไรอ่าน
ขอบคุณครับ
-
จริงๆต้องลองเขียน C++ ก่อน จากนั่นศึกษา OOP ก่อนนะครับ จากนั่นก็เรียนรู้ MFC แต่ไมโคซอฟท์ เวลามันเปลี่ยน vesion ทีชอบเปลี่ยนกฏการเขียน code ตลอดใน MFC อ่ะ เพราะถ้าไม่ศึกษาตามที่ผมบอก จะอ่าน code แล้ว งง ครับหรืออย่างน้อยที่สุด ศึกษา c++ กับ ลองใช้ MFC ครับยังไม่ต้องไปศีกษา OOP ก็ได้ครับ เพราะมันเป็นภาษา C++ ครับ พอได้แล้ว ถึงจะเรียกความสามารถของ c++ ของมาใช้งานได้ครับ
-
ลองทดสอบเขียนเล่นๆคอมไพล์ผ่าน แต่เอามาใช้ไม่ได้ error 127 :'(
-
เอาไฟล์
MFCLibrary1.cpp กับ MFCLibrary1.def มาให้ผมครับ
-
มันต้องทำอะไรก่อนเหรอครับ
-
เอา 2 ไฟล์ที่ผมแก้ให้ไปใส่แทนอันเดิมแล้ว compiler ดูครับเมื่อได้ Dll แล้ว ก่อนใส่ Dll ใหม่ให้ปิด EA ตัวเดิมก่อนนะครับไม่งั้นมันจะไม่อ่านค่า Dll ใหม่ให้ครับ
-
ใช้ได้ไม่เออเร่อแล้วครับ ทุกฟังก์ชั่นที่ให้ mt4 เรียกใช้ต้องทำแบบนี้หมดเลยใช่ไหมครับ
แล้วถ้าเป็นฟังก์ชันภายใน ที่่ dll เรียกใช้กันเองทำยังไงครับ หรือเขียนแบบปกติได้เลย
-
ใช้ได้ไม่เออเร่อแล้วครับ ทุกฟังก์ชั่นที่ให้ mt4 เรียกใช้ต้องทำแบบนี้หมดเลยใช่ไหมครับ
แล้วถ้าเป็นฟังก์ชันภายใน ที่่ dll เรียกใช้กันเองทำยังไงครับ หรือเขียนแบบปกติได้เลย
ใช้ได้ไม่เออเร่อแล้วครับ ทุกฟังก์ชั่นที่ให้ mt4 เรียกใช้ต้องทำแบบนี้หมดเลยใช่ไหมครับ
ใช้ครับ
แล้วถ้าเป็นฟังก์ชันภายใน ที่่ dll เรียกใช้กันเองทำยังไงครับ หรือเขียนแบบปกติได้เลย
ใช้ครับแต่ต้องตรงตามหลักของ C++ นะครับ ส่วนเรื่องตัวแปรกับฟังก์ชั่นอื่นๆๆ ก็ต้องยึด MFC + C++ นะครับ เพราะเรากำลังเขียน C++ ไม่ใช้ MQL4 ครับ
-
ขอบคุณมากครับ ลองเขียนดูได้แล้วทั้งฟังก์ชั่นภายในและภายนอก
ต่อไปก็เอาฟังก์ชั่น ที่เขียนใน mq4 ย้ายมาไว้ใน dll ให้หมด ตรงนี้เขียนเหมือนๆเดิมไม่น่ามีปัญหา
คงไปติด mfc ที่เรียก windows handle ที่ถามทิ้งไว้ครั้งก่อน พอจะมีตัวอย่างการเรียกใช้ไหมครับ
เดี๋ยวจะลองเขียนอีเอตัวแรกมาแจก ก่อนจะทำขาย
-
จริงๆๆถ้าเราหา InternalDll.lib ได้ไม่ต้องเหนื่อยทำอะไรเลยครับแค่ดึงฟังก์ชั่นของ dll ตัวเดิมมาใช้ใน Dll เราก็จบแล้วครับ
-
มันต้องมีวิธีดึง ฟังก์ชั่นใน Dll ออกมาใช้โดยที่ไม่ต้องมี lib ไฟล์ ถ้าทำได้ Dll คุณก็เรียกการเช็กข้อมูลจาก Dll ตัวเก่าก็จบแล้วครับ
-
ถ้าเราใช้คำสั่งจาก mt4 หา window handle
int WindowHandle( string symbol, int timeframe)
แล้วส่งเลขไปให้ dll จะใช้ mfc อ่านค่า title bar ได้หรือเปล่าครับ
ผมเห็นหลายอีเอหลายเหมือนกันที่ส่ง WindowHandle ไปให้ dll
อย่าง wallstreet,forexthor มันส่งไปทุกฟังก์ชั่นเลย
-
ถ้าเราใช้คำสั่งจาก mt4 หา window handle
int WindowHandle( string symbol, int timeframe)
แล้วส่งเลขไปให้ dll จะใช้ mfc อ่านค่า title bar ได้หรือเปล่าครับ
ผมเห็นหลายอีเอหลายเหมือนกันที่ส่ง WindowHandle ไปให้ dll
อย่าง wallstreet,forexthor มันส่งไปทุกฟังก์ชั่นเลย
มันส่ง Handle ของหน้าต่างกราฟเท่านั่นครับ ที่เราต้องการคือ handle ของโปรแกรม mt4 ครับเราถึงจะได้ Account Number ของ MT4 นั่นๆๆ
-
อ่าว เวรกรรม ทำไมมันยากงี้หวา
-
วันนี้ผมเจอเครื่องมือตัวหนึ่งมันสร้าง LIB ของ DLL ได้ เลยมาลองสร้างกับตัวที่คุณเคยโพสว่ามันรู้ account number เอง ทำทุกอย่าง ผ่านหมดเขียน code ก็ complie กับ VC++ ผ่านหมดแต่เอาไปใช้จริง MT4 ERROR 126 ซักงั้น
-
อ่าว กรรม
ขอไฟล์หน่อยครับ เผื่อเครื่องผมรันได้ อิอิ
....................
เมื่อวานผมเมล์ไปขอซื้อโค้ด เขาทำเนียนว่าอีเอเขาไม่มีโค้ดแบบนี้
พอส่งอีเอไป ตอบกลับมาใหม่ เราไม่สามารถแชร์โค้ดใดๆในอีเอของเราได้
ขนาดขอซื้อยังฟอร์ม ไม่ขายก็บอกกันตรงๆ
-
555 เค้าไม่ขายให้เราง่ายๆๆหรอกครับคิดได้ถึงระดับนีก็ต้องไวทำมาหากินหละ ตัว code ผมจับ Dll ตัวเดิมให้มันเรียกใช้ใน dll ตัวใหม่ compile ผ่านแต่เอาไปใช้งานจริงไม่ผ่าน error 126 แสดงว่าเรายังต้องมีไรสักอย่างที่ทำไม่ครบครับ
-
ทำแบบนี้เวลาใช้จริงต้องใช้ dll 2 ตัวรึเปล่าครับ
ปล. error 126 เหมือนกันครับ อิอิ
-
ใช้ครับตามหลักต้องใช้ 2 ตัวครับก็เหมือนว่า DLL เราสร้างมาเพื่อเรียกฟังก์ชั่นใน DLL ตัวแรกอีกทีครับ แต่เขียนไปแล้วมัน Compile ผ่านแต่เรียกใช้งานจาก MT4 ได้ไม่ครับเหมือนว่ามันไม่เข้ากันครับ
-
ท่านแอดมินครับ ถ้าเราอ่านค่า window handle มันตรงๆไม่ได้ เราไม่รู้ว่ามันเลขอะไร
mfc มันมีค่า window ทั้งหมดเก็บไว้ที่ไหนบ้างไหมครับ
เราสามารถ for หาไปเรื่อยๆได้ไหมครับ
อย่าง spy++ เนี่ยมันมีครบทุกวินโดว์เลย
-
ปัญหาคือเราไม่รู้ตำแหน่งใน Memory ที่เก็บค่า windows อันนั่นเอาไวครับ ที่ตัว spy++ มันเห็นทั้งหมดเพราะมันเ list จากระบบมาแต่เราเองก็ต้องเป้นคนเลือก list ดูอยู่ดีครับ แล้วตัว windows ของ Mt4 ที่เก็บ หมายเลข account ผมลองเปิด Mt4 ขึ้นมา 2 ตัวแล้วเอา Spy++ ดูมันมีชื่อเหมือนกันอีกครับ ตอนนี้ผมมีอีกแนวคิดหนึ่งครับ จากกระทู้ของคุณ liconz ที่อ่านค่าจากไฟลืครับ ลองเข้าไปดูใน folder config ของ mt4 นะครับมันมีรายละเอียดของ Account ของ server ทุกอันหมดผมกำลังคิดว่าถ้าเราอ่านไฟล์จากตัว account ได้มันน่าจะให้หมายเลข accont number เราได้เหมือนกันนะครับ
-
คิดอยู่เหมือนกันครับ แต่มันเข้ารหัสไว้ อ่านไม่ออก อิอิ
มีอีกคำถามครับ วันนี้เริ่มหัดเขียน c++ แล้วมึนเลย แค่ตัวแปรก็ไม่เหมือนต้องหาตำราอ่านใหม่
1. dll สามารถ import dll อีกทีได้หรือเปล่าครับ
ผมจะย้ายอันนี้ไปใส่ dll
#import "wininet.dll"
int InternetAttemptConnect (int x);
int InternetOpenA(string a0, int a1, string a2, string a3, int a4);
int InternetOpenUrlA(int a0, string a1, string a2, int a3, int a4, int a5);
int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead,
int& lNumberOfBytesRead[]);
int InternetCloseHandle(int a0);
#import
ถ้าอิมพอร์ตไม่ได้ จะใช้คลาสอะไรอ่านเว็บได้ครับ
mfc ก็หาตำราไทยอ่านไม่ได้เลย
-
ตามปกติ ใน Dll ก็สามารถ include Dll อื่นมาใช้ได้ครับ คุณก็แค่ include wininet.dll มาใช้ใน Dll ใหม่ที่คุณสร้างได้ครับ ต้องลองดูครับ ถ้า compile ผ่านแต่เอาไปใช้ใน MT4 ได้หรือไม่อันนี้ผมไม่รู้ ครับต้องลองดู
-
เขียนไว้ข้างบนแค่นี้ ใช่ไหมครับ
#include "wininet.dll"
มันบอกเออเร่อหาไฟล์ไม่เจอครับ
-
เขียนไว้ข้างบนแค่นี้ ใช่ไหมครับ
#include "wininet.dll"
มันบอกเออเร่อหาไฟล์ไม่เจอครับ
ไม่ต้องประกาศ 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;
}
ลองดูครับ
-
ผมขอพักตรงนั้นไว้ก่อนค่อยกลับมาถามใหม่นะครับ
ตอนนี้ผมงงเรื่องสตริงมาก ในตำราบอก c++ ไม่มีสตริง มีแต่ char ที่เป็นอาเรย์ ผมลองเขียนยังไงมันเออเร่อใช้ไม่ได้ซักที
ผมขอตัวอย่าง ฟังก์ชั่นง่ายๆ ที่รับค่าเป็นสตริงแล้วรีเทิร์นกลับมาเป็นสตริงหน่อยครับ
เช่นใน mt4 เขียนแบบนี้ ใน c++ จะเขียนแบบไหน
string terminalpath(string path)
{
path = path + "\terminal.exe" ;
return (path);
}
void start()
{
string mt4path =terminalpath(TerminalPath() );
Print("MT4 Path = "+mt4path ) ;
}
-
เริ่มแรกต้องทำความเข้าใจให้ตรงกันก่อนครับ C++ มันมีตัว complie ที่หลายหลายมากคุณจะใช้ตัวไหนเราต้องใช้ให้ตรงกันก่อนครับ ถึงจะคุยกันรู้เรื่องครับ ถ้าจะเรียนกันจริงต้องเริ่มจากตรงนี้เลยครับ c++ เป็นภาษาที่ ครอบจักวาลมากครับ
-
ผมใช้ visual studio 2012 เลือกนิวโปรเจคเป็น VC++ -> MFC -> DLL ครับ
กำลังจะหัดเขียนอ่านไฟล์ ตามนี้ http://objectoriented-programming.blogspot.com/2012/08/11-file-handling.html
แต่ยังไม่ทันไรก็ติดกับ string ซะแล้วครับ ทดลองเขียนง่ายๆก็เออเร่อ
-
ผมขอพักตรงนั้นไว้ก่อนค่อยกลับมาถามใหม่นะครับ
ตอนนี้ผมงงเรื่องสตริงมาก ในตำราบอก c++ ไม่มีสตริง มีแต่ char ที่เป็นอาเรย์ ผมลองเขียนยังไงมันเออเร่อใช้ไม่ได้ซักที
ผมขอตัวอย่าง ฟังก์ชั่นง่ายๆ ที่รับค่าเป็นสตริงแล้วรีเทิร์นกลับมาเป็นสตริงหน่อยครับ
เช่นใน mt4 เขียนแบบนี้ ใน c++ จะเขียนแบบไหน
string terminalpath(string path)
{
path = path + "\terminal.exe" ;
return (path);
}
void start()
{
string mt4path =terminalpath(TerminalPath() );
Print("MT4 Path = "+mt4path ) ;
}
ถ้าใน MFC เราใช้ CString ก็ได้ครับ
CString terminalpath(CString paths)
{
CString path = paths +_T( "\terminal.exe") ;
return (path);
}
-
ใช้ +_T นี่เอง คอมไพล์ผ่านแล้วครับ
แต่ที่นี้ผมลอง export มาให้ mt4 มันเออเร่อครับ รบกวนอีกรอบครับ
2012.10.17 18:30:10 test_dwall NZDUSD,M1: function 'CheckTerminal' call from dll 'dwall.dll' critical error c0000005 at 5B0FFB85.
..........................
#define MT4_EXPFUNC __declspec(dllexport)
MT4_EXPFUNC CString _stdcall CheckTerminal(CString paths)
{
CString path = paths +_T( "\terminal.exe") ;
return (path);
}
-
ใช้ +_T นี่เอง คอมไพล์ผ่านแล้วครับ
แต่ที่นี้ผมลอง export มาให้ mt4 มันเออเร่อครับ รบกวนอีกรอบครับ
2012.10.17 18:30:10 test_dwall NZDUSD,M1: function 'CheckTerminal' call from dll 'dwall.dll' critical error c0000005 at 5B0FFB85.
..........................
#define MT4_EXPFUNC __declspec(dllexport)
MT4_EXPFUNC CString _stdcall CheckTerminal(CString paths)
{
CString path = paths +_T( "\terminal.exe") ;
return (path);
}
จะให้มันตรวจาอบว่ามี exe หรอครับเอา code ทั้งหมดมาดูก่อนครับ
-
แค่ทดสอบการใช้สตริงเฉยๆครับ เดี๋ยวจะหัดเขียนการอ่านไฟล์ต่อ
-
MT4_EXPFUNC CString _stdcall CheckTerminal(char* paths)
{
CString temp(paths);
CString path = temp + _T("\terminal.exe") ;
return path;
}
-
MT4_EXPFUNC CString _stdcall CheckTerminal(char* paths)
{
CString temp(paths);
CString path = temp + _T("\terminal.exe") ;
return path;
}
คราวนี้คอมไพล์ผ่าน แต่มันรีเทิร์นออกมายังงี้ครับ
Terminal path is $hinkForex
ที่ถูกต้องมันควรเป็นแบบนี้ F:\ThinkForex\terminal.exe
ผมลองให้รีเทิร์น temp ก็ออกมาเหมือนกันครับ
-
MT4_EXPFUNC CString _stdcall CheckTerminal(char* paths)
{
CString temp(paths);
CString path = temp + _T("\terminal.exe") ;
return path;
}
คราวนี้คอมไพล์ผ่าน แต่มันรีเทิร์นออกมายังงี้ครับ
Terminal path is $­hinkForex
ที่ถูกต้องมันควรเป็นแบบนี้ F:\ThinkForex\terminal.exe
ผมลองให้รีเทิร์น temp ก็ออกมาเหมือนกันครับ
แสดงว่า CString ของ MFC Version ใหม่ๆๆ MT4 รับค่ากลับไม่ได้ ต้องกลับสู่พื้นฐานแล้วครับใช้ Char[] แทน
MT4_EXPFUNC char* _stdcall CheckTerminal(char paths[100])
{ char aaa[100];
strcpy(aaa,paths);
strcat(aaa,"\\terminal.exe" );
return aaa;
}
-
ขอบคุณอย่างแรงครับ ผ่านแล้ว แต่ strcpy กับ strcat คอมไพล์ไม่ผ่าน มันให้ใช้ strcpy_s กับ strcat_s แทน พอเปลี่ยนก็ใช้ได้เลย
ที่จริงผมลองตั้งแต่เช้าแล้วนะ แต่ไม่รู้ว่าเครื่องหมาย \ ต้องใส่ 2 อัน ผมใส่ไปอันเดียวแล้วมันออกมาเป็น F:\ThinkForexerminal.exe มันหายไป 2 ตัว \t เลยนึกว่าใช้ไม่ได้อีก
ยังงี้ฟังก์ชั่นอ่านไฟล์ ของ mfc ใช้ CString ผมก็ใช้ไม่ได้ด้วยสิครับ ทำไงดีครับ
http://objectoriented-programming.blogspot.com/2012/08/11-file-handling.html
-
ขอบคุณอย่างแรงครับ ผ่านแล้ว แต่ strcpy กับ strcat คอมไพล์ไม่ผ่าน มันให้ใช้ strcpy_s กับ strcat_s แทน พอเปลี่ยนก็ใช้ได้เลย
ที่จริงผมลองตั้งแต่เช้าแล้วนะ แต่ไม่รู้ว่าเครื่องหมาย \ ต้องใส่ 2 อัน ผมใส่ไปอันเดียวแล้วมันออกมาเป็น F:\ThinkForexerminal.exe มันหายไป 2 ตัว \t เลยนึกว่าใช้ไม่ได้อีก
ยังงี้ฟังก์ชั่นอ่านไฟล์ ของ mfc ใช้ CString ผมก็ใช้ไม่ได้ด้วยสิครับ ทำไงดีครับ
http://objectoriented-programming.blogspot.com/2012/08/11-file-handling.html
ไปหา download visual c++ 6.0 มาใช้ครับ ใช้ได้ทุกอย่าง syntax ไม่วุ่นวายเหมือนตัวใหม่ๆๆด้วยครับ
-
Decompile ไม่ออกด้วยหรือเปล่าครับ
ขอชื่อรุ่นโปรแกรมเต็มๆหน่อยครับ กันโหลดผิด
-
Decompile ไม่ออกด้วยหรือเปล่าครับ
ขอชื่อรุ่นโปรแกรมเต็มๆหน่อยครับ กันโหลดผิด
Microsoft Visual C++ 6.0 Professional Edition หรือ Microsoft Visual Studio 6.0 ตัวไหนก็ได้ครับ ตัวนี้ก็ Decomplie ไม่ได้เหมือนกันครับ แต่ต้องลงบน win xp นะครับ ถ้าไม่มีใช้พวก vmware จำลองก้ใช้ได้ครับ version นี้ผมเขียน code แล้วใช้ MT4 ได้ไม่มีปัญหาเลยครับเพราะ MT4 ก็ใช้ version นี้สร้างมา ส่วน String โดยใช้ CString ก็ไม่มีปัญหา ตัว Syntax ก็ง่ายกว่า ครับ
-
ขอบคุณครับ เดี๋ยวลองดูก่อน อิอิ
-
ท่านแอดมินพอจะมีโค้ดตัวอย่าง mfc ให้ไปศึกษาบ้างไหมครับ จะได้ไม่ต้องถามบ่อยๆ
-
ท่านแอดมินพอจะมีโค้ดตัวอย่าง mfc ให้ไปศึกษาบ้างไหมครับ จะได้ไม่ต้องถามบ่อยๆ
ลองหา PDF ต่างประเทศดูครับสมัย 7-8 ที่ผมเรียนก็จาก PDF ครับ แต่ MFC จริงๆๆมันเน้น ออกด้านกราฟฟิก ถ้าอยากได้โปรแกรมมิ่งจริงๆๆต้องเรียน ภาษา C++ ตรงๆๆครับ
-
MT4_EXPFUNC CString _stdcall CheckTerminal(char* paths)
{
CString temp(paths);
CString path = temp + _T("\terminal.exe") ;
return path;
}
เปลี่ยนมาใช้ c++ 6.0 enterprise กับวิน XP มันก็ใช้ CString ไม่ได้เหมือนกันครับ เหนื่อยใจ
2012.10.18 17:36:28 test_dwall EURUSDm,M15: Terminal path is | etaTrader - EXNESS
-
ใน visual c++ 6.0 นะครับ
MT4_EXPFUNC char* _stdcall CheckTerminal(char* paths)
{ CString a=paths ;
a=a+"\\terminal.exe";
char *pStr=new char[a.GetLength()];
strcpy(pStr,a.GetBuffer(a.GetLength()-1));
return pStr;
}
-
สรุปว่า 6.0 ก็ต้องรีเทิร์นเป็น char* อยู่ดีสินะครับ
แต่ดีกว่าตรงที่ CString รับค่าจาก char* ได้ด้วย แต่ 2012 เออเร่อ
-
สรุปว่า 6.0 ก็ต้องรีเทิร์นเป็น char* อยู่ดีสินะครับ
แต่ดีกว่าตรงที่ CString รับค่าจาก char* ได้ด้วย แต่ 2012 เออเร่อ
จริงๆเราส่งออกไปเป็น CString เลยก้ได้แต่ข้อความที่ได้มันจะได้ตัวอักษรแปลกๆที่ด้านหน้าข้อความ เกิดจากการการอ่านตำแหน่งไบต์ไม่ครบ แต่การที่เราส่ง char* คือบอกให้โปรแกรมไปอ่านค่าข้อมูลในหน่วยความจำที่ Pointer ชี้อยู่ ที่นี้ใน version 6 เราให้ CString รับค่า char ได้ตรงๆๆแค่นี้ก็ดีกว่า version ใหม่มากแล้ว เพราะแปลงค่าเป้น CString เราก็เอาไปกระทำกันแบบ String ได้แล้วซึ้งง่ายกว่า version มากๆๆ
-
ท่านแอดมินครับ เวลาจะเรียกใช้ฟังก์ชั่น 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 ก็อ่านหมดแล้วไม่มีบอก เศร้า
-
ท่านแอดมินครับ เวลาจะเรียกใช้ฟังก์ชั่น 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 หรือครับ
-
สงสัยเว็บมันเขียนผิด ผมไม่ได้ทำอะไรนอกจากก๊อปโค้ด 4 บรรทัดนั้นมาครับ เพราะในเว็บไม่ได้บอกให้ทำอะไร include อะไรเนี่ยทำไม่เป็นมันไม่มีบอกครับ
มีบทที่ 4 สอนให้ทำคลาสเอง แต่ไม่มีบทไหนสอนให้เรียกคลาส MFC เลย
อันนี้เขียนด้วย MFC DLL ครับ ส่วน messagebox เดี๋ยวค่อยลบทิ้ง แล้วรีเทิร์นค่าที่อ่านได้ออกมาแทนครับ
ที่จะทำทั้งหมดคือ
- ย้ายโค้ดจาก mq4 มาที่ dll -> ทำได้แล้ว
- เขียน dll ให้้อ่านไฟล์ text -> กำลังมึนอยู่
- เขียน dll ให้อ่าน text จากเว็บ -> เอาไว้ทีหลัง
4 วันแล้วยังอ่านไฟล์ไม่ได้เลยครับ อิอิ
-
คำแนะนำนะครับ
- เขียน dll ให้้อ่านไฟล์ text -> กำลังมึนอยู่ ( ศึกษา วิธีเขียนอ่านเขียนไฟลืของ C++ ธรรมดานี้หละครับแล้วจับไปดัดแปลงนิดหน่อยใช่บน DLL ได้เลยครับ )
- เขียน dll ให้อ่าน text จากเว็บ -> เอาไว้ทีหลัง ( ศึกษา wininet.dll ครับศึกษาฟังก์ชั่นแล้วนำมาใช้งานครับ )
-
ขอบคุณครับ
wininet ตัวนี้ทำใน mq4 ได้แล้วครับ แต่พอย้ายไปใส่ dll ก็ยังไม่รู้วิธีอิมพอร์ตอีก แต่เอาไว้มึนทีหลัง
-
ท่านแอดมินครับ ตอนนี้อ่านไฟล์ได้แล้ว แต่เปรียบเทียบไฟล์ไม่ได้
ผมใช้ fscanf อ่านไฟล์ออกมาได้ทีละคำ
สมมุติไฟล์ เขียนว่า 1234
เวลาอ่านมันก็อ่านได้ 1234
แต่พอเอามาเปรียบเทียบ สมมุติเก็บไว้ที่ตัวแปร word
if ( word =="1234" ) มันดันไม่ถูกซะงั้นครับ
-
ท่านแอดมินครับ ตอนนี้อ่านไฟล์ได้แล้ว แต่เปรียบเทียบไฟล์ไม่ได้
ผมใช้ fscanf อ่านไฟล์ออกมาได้ทีละคำ
สมมุติไฟล์ เขียนว่า 1234
เวลาอ่านมันก็อ่านได้ 1234
แต่พอเอามาเปรียบเทียบ สมมุติเก็บไว้ที่ตัวแปร word
if ( word =="1234" ) มันดันไม่ถูกซะงั้นครับ
ข้อความเป้น String ใช้ไหมครับ ถ้าใช่ใช้ strcmp( ) เปรียบเทียบครับ มันไม่เหมือน MQl4 ถ้าเปรียบเทียบ String จะเขียนแบบเงื่อนไขได้เลยครับ
-
โอพลาดอย่างแรง ลืมไปเลย ผ่านแล้วขอบคุณครับ
ต่อไปก็ 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
-
สีแดงเป้นตัวเนื้อฟังก์ชั่นครับ ที่จะให้เรียกใช้จาก MT4 แล้วเรียกใช้ function จาก wininet.dll ครับ แล้วส่งค่ากลับไปที่ mt4 แนะนำให้เปลี่ยนชื่อนิดหนึ่งครับ ไม่งั้นมันจะ overloading ซึ่งผมไม่แน่ใจว่ามันจะทำงานได้ไหมครับ
-
แปลว่าการอิมพอร์ตใน 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 เรียก แบบนี้น่าจะไม่มึนเท่าไรครับ อิอิ
-
ตามหลักการคือแบบนั่นครับต้องลองดูก่อน ถ้าเรียกแล้วขึ้นมาใช้ไม่ได้ ต้องศึกษาวิธีของ MFC ที่ใช้ติดต่อ network ครับ
-
ท่านแอดมินครับ ตอนนี้ผมอ่าน 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
แสดงว่ามันตรวจสอบการขึ้นบรรทัดใหม่ไม่ได้ ผิดตรงไหนรบกวนแก้ให้ทีครับ
-
ลองส่ง code ทั้งหมดมาให้ผมที่ email ครับ admin@thaiforexea.com ครับ ผมต้องลอง test ดูครับถึงรู้ว่าทำไมมัน error ครับ
-
รู้แล้วครับ วันก่อนผมถามแล้ว ดันลืมอีก
มันใช้ == หรือ != ไม่ได้ ต้องใช้ strcmp()
เขียนสตริงทีก็มึนที อิอิ
-
ครับ ส่วนฟังก์ชั่นใน wininet.dll ก็เรียกใช้แบบนั่นเลยใช้ไหมครับ ไม่มี error อะไรใช่ไหมครับ
-
#include "wininet.h" แล้วเรียกใช้ได้เลยครับ ไม่ต้องอิมพอร์ต
ผมลอกมาจากนี้ครับ http://www.cplusplus.com/forum/windows/62128/
-
#include "wininet.h" แล้วเรียกใช้ได้เลยครับ ไม่ต้องอิมพอร์ต
ผมลอกมาจากนี้ครับ http://www.cplusplus.com/forum/windows/62128/
ถ้าเรียก wininet.h ใช้ได้ก็ง่ายหละครับเพระาเป็น libary มาตราฐานอยู่แล้ว เราไม่ต้องไปเรียกจาก Dll มาใช้อีก
-
ครับ ที่ยากสุดคือ string
จนตอนนี้ยังตัดคำเป็นบรรทัดไม่ได้เลยครับ มึนจริงๆ
-
ครับ ที่ยากสุดคือ string
จนตอนนี้ยังตัดคำเป็นบรรทัดไม่ได้เลยครับ มึนจริงๆ
ลองแปลงข้อความที่จะเขียนลงไฟล์เป้น CString ก่อน จากนั่นใช้ Remove ของ Cstring ช่วยดูตามตัวอย่างนี้ครับ http://msdn.microsoft.com/en-us/library/aa300579(v=vs.60).aspx
-
ผมติดตรงนี้ครับ
CString content;
CString contentline;
int i =0;
do {
lpBuffer = new char[2000];
ZeroMemory(lpBuffer, 2000);
InternetReadFile(hFile, (LPVOID)lpBuffer, 1, &dwBytesRead);
char* char1 = &lpBuffer[0] ;
if( strcmp(char1,"\n") !=0 && strcmp(char1,"\r")!=0 ) // ทีละตัวอักษร ถ้ายังไม่จบ ให้เก็บต่อไว้ที่ content
{
content = content + &lpBuffer[0] ;
}
else // จบบรรทัดแล้ว ไม่รู้ทำไง ใช้สตริงไม่ค่อยเป็นครับ
{
i++;
contentline = content ; // แบบนี้ไม่เวิร์ก
content ="";
}
delete[] lpBuffer;
lpBuffer = NULL;
} while (i==0); // ซ้อมเอาแค่บรรทัดเดียว
หลัง else มันต้องทำไง ถึงจะตัดคำมาไว้ที่สตริงตัวใหม่ได้ครับ
-
contentline คุณจะให้มันเก็บค่าอะไรครับ
-
เก็บค่าข้อความที่อ่านได้บรรทัดแรกครับ
เช่น บนเว็บเขียน
00000
11111
ก็ต้องได้ค่า 00000 ครับ
ตรงนี้คือผมจะย้ายค่าข้อความไปเก็บอีกตัวแปร แล้วลบค่าตัวแปรเดิมทิ้ง
contentline = content ;
content ="";
เพราะว่าต้องเอา content ไปใช้ใหม่ในบรรทัดที่ 2 3 4 ....
ผมงงมากที่ผมตรวจหาตัวขึ้นบรรทัดได้แล้ว แต่ผมไม่สามารถเอาข้อความมาเก็บในตัวแปรได้ ถ้าเป็น mq4 เขียนแบบนี้ใช้ได้ครับ
ที่จริงต้องทำอาเรย์เก็บหลายบรรทัด แต่นี่ลองแค่บรรทัดเดียวก็ยังไม่ได้เลยครับ
สตริงมันมั่วเกิน มีทั้ง char char* CSTring
-
do {
lpBuffer = new char[2000];
ZeroMemory(lpBuffer, 2000);
InternetReadFile(hFile, (LPVOID)lpBuffer, 1, &dwBytesRead);
char* char1 = &lpBuffer[0] ;
if( strcmp(char1,"\n") !=0 && strcmp(char1,"\r")!=0 )
{
content = content + &lpBuffer[0] ;
}
delete[] lpBuffer;
lpBuffer = NULL;
} while (i!=EOF);
ลองแบบนี้ดูครับสุดท้ายถ้ามันถึง EOF แล้วให้เอา content ไปลองใช้ดูครับว่ามันเก็บ String ที่ตัวอักษรติดกันทั้งหมดหรือยัง
-
เก็บค่าข้อความที่อ่านได้บรรทัดแรกครับ
เช่น บนเว็บเขียน
00000
11111
ก็ต้องได้ค่า 00000 ครับ
ตรงนี้คือผมจะย้ายค่าข้อความไปเก็บอีกตัวแปร แล้วลบค่าตัวแปรเดิมทิ้ง
contentline = content ;
content ="";
เพราะว่าต้องเอา content ไปใช้ใหม่ในบรรทัดที่ 2 3 4 ....
ผมงงมากที่ผมตรวจหาตัวขึ้นบรรทัดได้แล้ว แต่ผมไม่สามารถเอาข้อความมาเก็บในตัวแปรได้ ถ้าเป็น mq4 เขียนแบบนี้ใช้ได้ครับ
ที่จริงต้องทำอาเรย์เก็บหลายบรรทัด แต่นี่ลองแค่บรรทัดเดียวก็ยังไม่ได้เลยครับ
สตริงมันมั่วเกิน มีทั้ง char char* CSTring
แล้วตัวแปร contentline ในบรรทัดที่ 2 3 4 ยังจะเอากลับมาใช้หรือเปล่าครับ
-
ผมลองเอาไปเขียนลงไฟล์ มันเขียนลงไฟล์ได้โดยติดกันหมดไม่เว้นบรรทัดครับ
-
จริงๆผมต้องการแบบนี้ครับ url ตัวอย่างคืออันนี้ http://www.expertfxtrading.com/dmpaccno
ข้างในนั้นเก็บเลขบัญชีไว้
ผมต้องการอ่านไฟล์เว็บ เพื่อดึงมาทีละ 1 บรรทัด เอามาตรวจสอบกับเลขบัญชี MT4 ว่าตรงกันไหม
ซึ่งผมอ่านเว็บได้แล้ว
ตรวจจบบรรทัดได้แล้ว
แต่เอาไปเก็บในตัวแปรเพื่อตรวจสอบเลขบัญชีไม่ได้ครับ
-
ถ้าอย่างนั่นสิ่งที่คุณต้องการคือเอา contentline เก็บค่า String แล้วนำ contentline ไปใช้ตรวจสอบเลขบัญชีใช้ไหมครับ
-
ใช่ครับ วนลูปตรวจเอาทีละบรรทัด
-
เป็นปัญหาเดียวกับตอนส่งค่ากลับไปให้ MT4 ครับลองศึกษาจากโปรเจกที่ผมเขียนด้วย vc++ 6.0 นะครับจะเข้าใจเอง ให้กด run โปรแกรมเลยนะครับ
-
มันออกมาแบบนี้ครับ
a is 000000
pStr is 000000
###########################
a : 000000
contentline : 000000
pStr : 000000
จากโค้ดผมก็ยัง งง อยู่ดี
char *pStr=new char[contentline.GetLength()];
strcpy(pStr,contentline.GetBuffer(contentline.GetLength()-1));
CString a="000000";
if(a == "000000") 1. ทำไม a ใช้ == ได้
{
cout<<"a is 000000 "<<endl;
}
if(contentline == "000000") 2. ทำไม contentline ใช้ไม่ได้
{
cout<<"contentline is 000000 "<<endl;
}
3. a กับ contentline เป็น CString เหมือนกัน งง ครับ
4.pSTr ใช้ได้ แต่ พอส่งกลับไป mt4 มันติดข้างหน้าตัวแปลกๆไปด้วย เอาออกยังไงครับ ∩╗┐000000
-
ตัวอักษรแปลกคือ ข้อมูลที่มันออกมาได้ครับ ลองเอา code นี้ไปรันดูครับ
-
ขอบคุณท่านแอดมินมากครับ ผ่านมา 10 หน้า ตอนนี้สำเร็จเรียบร้อยไปแล้ว
ผมพึ่งนึกว่า เมื่อก่อนตอนเขียน mq4 ข้อความที่อ่านมาจากเว็บ 2 ตัวแรก มันก็จะออกมาแปลกๆ
ตอนนั้นผมไม่รู้ทำไงจึงใส่บรรทัดแรกไว้เป็นเลข 000000 ครับ
-
ท่านแอดมินครับ วิธีทำเว็บให้เป็น https: นี่ทำยังไงครับ แล้วทำเพียงหน้าเดียวได้หรือเปล่า หรือต้องทำทั้งเว็บ หรือซับโดเมน
คือผมลองใช้ smartsniff ดู พบว่ามันหา url ของเว็บธรรมดาเจอ แต่ถ้าเป็น https มันจะหาไม่เจอครับ
เลยอยากจะซ่อน url ซักหน่อย
-
https คือเวบที่ใช้ ssl รักษาความปลอดภัยครับ ลองดูที่เวบนี้ดูครับ http://support.google.com/adwords/bin/answer.py?hl=en&answer=2580401 น่าจะเป้นประโยชน์
-
SSL ไม่ใช้ของฟรีนะครับ ต้องเสียเงินกับบริษัทที่รับนำเนินการให้ ถ้าใช้ตัว openssl บางทีเวบเข้าแล้วจะเจอ error ก่อนครับ
-
ต้องซื้อซอฟแวร์มาใช้เหรอครับ อดเลย นึกว่าทำได้เอง
พวกโฮสที่เช่านี่มันไม่มีแถมให้เหรอครับ
ผมใช้ของ bluehost ครับ หน้าเว็บมันบอกแบบนี้
Unlimited Domain Hosting
Unlimited GB Hosting Space
Unlimited GB File Transfer
Unlimited E-mail Accounts
Free Domain
Free Site Builder w/ templates
Secure Shell, SSL, FTP, Stats
CGI, Ruby (RoR), Perl, PHP, MySQL
$100 Google Advertising Offer
24/7 Phone, Chat & Email Support
ตัวแดงๆนี่มันแถมมาให้ใช้ใช่หรือเปล่าครับ ไม่รู้ตรงไหนผมหาไม่เจอ
-
ลองไปดูที่นี้ครับว่า ssl คืออะไร https://ssl.in.th/
จริงๆมันมี openssl อีกตัวที่ฟรีครับแต่ทั้งสองตัว server ที่เราใช้รัน web ต้อง support ครับถึงใช้งานได้
-
ขอบคุณมากๆครับ เจอวิธีแล้ว ง่ายนิดเดียวเอง แค่เปลี่ยน url เป็นแบบนี้ https://secure.bluehost.com/~username
-
ท่านแอดมินครับ ดูเหมือน MFC DLL ที่เขียนจาก vc++ 6.0 จะรันได้บ้างไม่ได้บ้าง
vps win7 32bit ใช้ไม่ได้
vps win2003 32bit ใช้ไม่ได้
rdp win2008 64bit ใช้ได้
vps win2003 64bit ใช้ได้
ที่บ้าน win8 64bit ใช้ได้
vmware win xp 32bit ใช้ได้ ผมใช้เครื่องนี้เขียน
ลองหาดู vc 6 runtime ก็ไม่เห็นมีให้โหลด เจอแต่ vb6 ครับ
ลง vc2008 vc2010 redist ไปก็ใช้ไม่ได้ครับ
-
http://support.microsoft.com/kb/259403/th
จริงมันรันได้ไม่มีปัญหานะครับ เพระาผมก็ใช้อยู่ครับ หากเป็น DLL ผมจะสร้างแบบ Static libary เลยให้มันรวมเอา lib ที่เกี่ยวข้องใส่ไปใน dll ให้หมดถึงจะใหญ่แต่เวลาไปรันที่อื่นปัญหาจะน้อยกว่าครับ
-
ขอบคุณมากครับ พอดีผมไปเลือกแบบ link ครับ ไฟล์มันเล็กกว่ามาก
แปลกใจทำไมมันเป็นแต่วิน 32 บิต ทั้งที่ตอนเขียนก็ใช้วิน 32 บิต
-
ขอบคุณจ้า
-
ท่านแอดมินครับรบกวนอีกที MFC DLL จาก vs 6.0
ท่านแอดมินเขียนตัวอย่างให้ผมโพสนี้ http://www.thaiforexea.com/index.php/topic,1526.msg8190.html#msg8190
MT4_EXPFUNC char * _stdcall Activation( int window,char * symbol, char* no,char* name, char broker, bool demo, char* terPath,int mttime)
{
return "Account activation failed";
}
พอผมไป import ใน mt4 แล้วสั่งปริ้น
string pa = Activation(b,Symbol(),IntegerToString(AccountNumber()), AccountName(), AccountCompany(),IsDemo(),TerminalPath(),a);
Print( pa );
ตอน bulid 509 มันยังได้ปกติ แต่ตอนนี้ build 600 ขึ้นไป มัน Print ออกมาเป็นภาษาอ่านไม่ออก ???4????????d มีวิธีแก้ไหมครับ
-
ลองแก้ที่ตัว MQL4 ก่อนให้ใช้ฟังก์ชั่น CharArrayToString ในการรับค่าข้อความที่ส่งกลับมาจาก DLL ก่อนครับ ลองดูว่าหายเปล่าถ้าไม่หายก็ต้องไปหาวิธีแก้ที่ DLL ซึ่งตอนนี้ Vc++ 6 ผมไม่ได้เล่นนานแล้วครับเพราะไม่มีเครื่อง XP ให้ใช้งานแล้วครับ
-
คอมไพล์เออเร่อครับ
string pa = CharArrayToString( Activation(b,Symbol(),IntegerToString(AccountNumber()), IntegerToString(AccountName()), AccountCompany(),IsDemo(),TerminalPath(),a),0,WHOLE_ARRAY,CP_ACP );
เขียนแบบนี้ขึ้น 'Activation' - variable expected
------------------------
string pa = Activation(b,Symbol(),IntegerToString(AccountNumber()), IntegerToString(AccountName()), AccountCompany(),IsDemo(),TerminalPath(),a);
string pb = CharArrayToString(pa,0,WHOLE_ARRAY,CP_ACP) ;
เขียนแบบนี้ขึ้น 'pa' - parameter conversion not allowed
-
ลองเอาตัวอย่างไปดูครับ MT4 ตัวใหม่มัน Compile ด้วย VC รุ่นใหม่ๆแล้วครับบางอย่างที่เคยใช้ได้ กลับใช่ไม่ได้ ยิ่งพัฒนายิ่งทำให้เขียน Code ยากขึ้นครับ
-
ตัวอย่างที่ให้มาผมเอาไปเปิดใน vc 6.0 ไม่ถูก มันไม่มีไฟล์ workspace .dsw
ส่วนไฟล์ dll กับสคริป ผมไปลองรันดูมันอ่านออกไม่หมดครับ
จาก abcderw123eds ได้เป็น abcderสี่เหลี่ยม
-
ผมใช้ VC 2010 เขียนครับตัว 6.0 ผมลองแล้วมันไม่ WORK เพราะ LIBARY มัน เก่ามากแล้วครับ16 -17 ปีแล้วครับ
-
ลืมเอารูปให้ดู
-
ของผมขึ้นไม่เหมือนกันครับ
อันนี้วิน 7 pro x64
(http://charts.mql5.com/4/434/gbpusd-m30-rvd-investment-group-2.png)
ส่วนอันนี้วิน xp รันใน vmware ไม่ขึ้นซักตัวเลยครับ
(http://charts.mql5.com/4/434/usdjpy-m15-armada-markets.png)
-
แปลกแฮะ ผมรันบน win 8.1 กับได้ มันต้องมีอะไรสักอย่างแน่ๆ
-
ผมลองกับอีกเครื่องก็ได้ผลเหมือนกันนะ ของผมเป็น win8.1 64bit ทั้ง 2 เครื่อง ไม่ทราบได้ลง visual c++ 2010 redistributable ตัว 32 และ 64 bit หรือยังครับ
-
ผมละเหนื่อยกับมันจริงๆครับ mt4 อัพเดตอะไรของมันไม่รุ อีเอ อินดิเคเตอร์ เก่าๆ ใช้ไม่ได้ไปซะเยอะ
จะมาดีคอมไพล์แก้โค้ดก็ไม่ได้ ต้องทิ้งไปเฉยๆเยอะเลย
ผมลองกับอีกเครื่องก็ได้ผลเหมือนกันนะ ของผมเป็น win8.1 64bit ทั้ง 2 เครื่อง ไม่ทราบได้ลง visual c++ 2010 redistributable ตัว 32 และ 64 bit หรือยังครับ
ทดลองลงหมดแล้ว ทั้งตัวธรรมดาและ sp1 ทั้ง x64 x86 เลยครับ ออกมาเป็นเหมือนเดิม
-
เอาไวเดียวพรุ่งนี้ผมลองลง win 7 ที่ VMware แล้วลอง compile ใหม่ดูครับมันต้องมีอะไรสักอย่างแหละที่เรามองข้ามมันไปครับ
-
ขอให้ได้ครับ สาธุ
-
ผมว่าน่าจะแก้ได้แล้วนะตามรูป เป็น win7 32 bit บน vmware ส่วน code คือ
MT4_EXPFUNC wchar_t* __stdcall xxx()
{
wchar_t* a =_T("abcderw123eds");
return a;
}
ลองเอาไปประยุกตืกับตัว vc 6.0 ถ้าไม่ได้ก็ใช้ VC 2010 ครับ
-
รันได้แล้ว ขอบคุณมากครับ
ผมสงสัยอีกนิดนึง wchar_t* มันคือไรครับ ต่างกับ char * ยังไง(อันหลังนี้เข้าใจว่าเป็นพ้อยเตอร์ ชี้ตำแหน่งเมโมรี่)
แล้วเวลาเขียน มันใส่ ="" เฉยๆไม่ได้ ต้องใส่ = _T("") เหรอครับ
แค่สตริงอย่างเดียวไหงมันมีเยอะยังงี้ มีลิงค์ภาษาไทยให้อ่านต่อบ้างไหมครับ
-
รันได้แล้ว ขอบคุณมากครับ
ผมสงสัยอีกนิดนึง wchar_t* มันคือไรครับ ต่างกับ char * ยังไง(อันหลังนี้เข้าใจว่าเป็นพ้อยเตอร์ ชี้ตำแหน่งเมโมรี่)
แล้วเวลาเขียน มันใส่ ="" เฉยๆไม่ได้ ต้องใส่ = _T("") เหรอครับ
แค่สตริงอย่างเดียวไหงมันมีเยอะยังงี้ มีลิงค์ภาษาไทยให้อ่านต่อบ้างไหมครับ
wchar_t มันก็คือตัวแปรชนิดหนึ่งแบบเดียวกับ พวก int หรือ char ธรรมดานั่นหละครับยิ่งเวลาผ่านไปนาน c++ มีการพัฒนาออกมามากขึ้นเลยจะมีชนิดตัวแปรให้ใช้มากขึ้น โดยเฉพาะ C++ ที่ไมโคซอฟ พัฒนาจะมีชนิดตัวแปรแปลกมาใหม่เรื่อยๆอ่ะครับ ลองใช้ google search ดูครับ ส่วนที่ว่าทำไมต้องใช้ _T("") แทน "" เพราะ Microsoft มีการปรับปรุง Syntax ให้มันใช้งานยากขึ้นนั่นหละครับ
-
ขอบคุณครับ