में सी ++ में, मैं एक वेक्टर <wstring> एक wchar_t के साथ इस उदाहरण में प्रारंभ कर सकते हैं की तरह **:[] wstring wchar साथ प्रारंभ करने में कैसे ** डी 2.0
#include <windows.h>
#include <string>
#include <vector>
#include <cwchar>
using namespace std;
int main() {
int argc;
wchar_t** const args = CommandLineToArgvW(GetCommandLineW(), &argc);
if (args) {
const vector<wstring> argv(args, args + argc);
LocalFree(args);
}
}
हालांकि, वहाँ एक रास्ता है डी 2.0 में wchar ** के साथ wstring [] शुरू करने के लिए?
मैं wstring [] इस तरह से करने के लिए wchar ** की सामग्री को जोड़ सकते हैं:
import std.c.windows.windows;
import std.c.wcharh;
extern(Windows) {
wchar* GetCommandLineW();
wchar** CommandLineToArgvW(wchar*, int*);
void* LocalFree(void*);
}
void main() {
int argc;
wchar** args = CommandLineToArgvW(GetCommandLineW(), &argc);
if (args) {
wstring[] argv;
for (size_t i = 0; i < argc; ++i) {
wstring temp;
const size_t len = wcslen(args[i]);
for (size_t z = 0; z < len; ++z) {
temp ~= args[i][z];
}
argv ~= temp;
}
LocalFree(args);
}
}
लेकिन, मुझे एक क्लीनर, सी ++ संस्करण की तरह सरल तरीके से प्राप्त करना चाहते हैं। (प्रदर्शन एक चिंता का विषय नहीं है)
स्ट्रिंग [] तर्कों में तारों को यूटीएफ -8 के रूप में एन्कोड किया जाएगा? मैं कमांड लाइन तर्क (जिसमें सभी प्रकार के यूनिकोड वर्ण शामिल हो सकते हैं) प्राप्त करने के लिए कमांडलाइन ToArgvW का उपयोग कर रहे हैं और फिर प्रत्येक तर्क को यूटीएफ -8 के रूप में एन्कोड किए गए स्ट्रिंग में बदलने के लिए std.utf.toUTF8() का उपयोग कर सकते हैं। यदि स्ट्रिंग [] तर्क उस को संतुष्ट करता है, तो मैं इसके बजाय इसका उपयोग करूंगा। लेकिन, मैंने नहीं सोचा था कि यह किया था। – Shadow2531
इसके साथ, यदि मैं आपका उदाहरण संशोधित करता हूं और स्ट्रिंग [] के रूप में argv को बदलता हूं और wstring() के बजाय std.utf.toUTF8() का उपयोग करता हूं, तो मुझे लगता है कि यह परिणाम मुझे उत्पन्न करता है। लेकिन, यदि मुख्य (स्ट्रिंग [] तर्क) वास्तव में एक ही यूटीएफ -8 एन्कोडिंग का उत्पादन करता है, तो मैं निश्चित रूप से इसका उपयोग करूंगा। – Shadow2531
wcslen() के साथ एक समस्या है जिसका मैंने उल्लेख नहीं किया था। अगर मैं std.string आयात करता हूं, डीएमडी का कहना है कि std.string.wcslen core.stdc.wchar_.wcslen के साथ संघर्ष करता है। तो, अगर wcslen() के बिना ऐसा करने का कोई अच्छा तरीका है, तो यह भी बहुत अच्छा होगा। – Shadow2531