2013-03-13 7 views
5

यह मेरा पहला समय है और मैं विंडोज CreateProcess फ़ंक्शन का उपयोग करके समांतर प्रक्रिया बनाना चाहता हूं। मैं इस तरहत्रुटि C3861: '_tcsdup': पहचानकर्ता नहीं मिला

LPTSTR szCmdline[] = _tcsdup(TEXT("\C:\\MyProgram_linux_1.1\\MyProgram.exe")); 

LPTSTR एक LPTSTR "(non-const) TCHAR string"command line तर्क और अन्य char and string types are discussed here

कमांड लाइन तर्क बनाया MSDN पर उदाहरण के आधार पर इस

if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl; 

और इन हेडर की तरह CreateProcess को पारित कर दिया है मौजूद हैं

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
#include <strsafe.h> 
#include <direct.h> 

संकलन इस पर त्रुटि है:

error C3861: '_tcsdup': identifier not found 

इस त्रुटि के लिए एक खोज error C3861: '_tcsdup'

सुनिश्चित नहीं समझा अगर यह संबंधित के बजाय पाया the same error but the solution was specific to using a .NET framework लेकिन वहां भी if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl;

पर एक error C2059: syntax error : ')' है यह त्रुटि कैसे तय की जाती है? और, इसके साथ क्या चल रहा है?

इसके अलावा, मैं CreateProcess as a learning step towards learning the Linux fork() समारोह का उपयोग कर रहा - दृश्य स्टूडियो इंटरफेस आसान मुझे इस्तेमाल करने के लिए है और एक बार इस डिबग और काम करता है, मैं जी ++ इंटरफ़ेस करने के लिए वहाँ से डिबग बदल सकते हैं और fork() के लिए बदल जाएगा और - तो एक समाधान यदि संभव हो तो fork() की ओर जाता है, यह सबसे फायदेमंद है।

+0

आप की जरूरत करने के लिए '# शामिल ' (या '_tcsdup' को 'strdup' में बदलें और' टी' मैक्रोज़ का उपयोग करना बंद करें)। –

+3

वाह ... आप 'फोर्क' सीखने के लिए 'CreateProcess' का उपयोग कर रहे हैं? क्यों न सिर्फ 'कांटा' सीखें? ये बहुत अलग जानवर हैं। – nneonneo

+0

एकमात्र चीज 'फोर्क' और 'CreateProcess' में आम बात यह है कि वे दोनों कार्य हैं ...' CreateProcess' के साथ टंकण करना 'फोर्क' को समझने में आपकी मदद करने की संभावना है, फ्रेंच सीखने में आपकी मदद करने की संभावना है जापानी । –

उत्तर

5

जोड़े निम्न शामिल हैं:

#include <tchar.h> 
+0

त्रुटि C2440: 'प्रारंभ करना': 'wchar_t *' से 'LPTSTR []' –

+3

एह में परिवर्तित नहीं किया जा सकता है। बस 'टीचर' और 'टेक्स्ट ("स्ट्रिंग") और '_tcsdup' और इस तरह खो दें। 'Wchar_t' और' एल "स्ट्रिंग" 'और 'wcsdup', या' char' और '" string "' और 'strdup' का प्रयोग करें। अब स्किज़ो चार टाइपिंग के लिए कोई अनिवार्य कारण नहीं है। – cHao

+0

क्यों आपको यह त्रुटि मिल रही है, हालांकि ... 'LPTSTR सामान []' वह नहीं है जो आप चाहते हैं। आप 'some_char_type सामान [] 'या' some_char_type * stuff' चाहते हैं। पहला आपको तारों के पॉइंटर्स की एक सरणी दे रहा है। – cHao

3

_tcsdup किसी मैक्रो, कि कार्यान्वयन कार्य करने के लिए नक्शे अपने यूनिकोड सेटिंग के आधार पर है। चूंकि आपने हेडर फ़ाइल (tchar.h) शामिल नहीं की है, इसलिए संकलक सोचता है कि यह एक प्रतीक है और गलत कोड उत्सर्जित करता है।

वास्तविक पता लगाने सेटिंग्स _tcsdump नक्शे पर निर्भर करता है उन में से एक रहे हैं:

  • _strdup
  • _mbsdup
  • _wcsdup

http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.110).aspx

संबंधित मुद्दे