この問題に関する質問はたくさんあり、さまざまな解決方法を試しています。これを行うには数多くの方法があるようですが、誰も働いていません。私はC++とVSにはとても新しく、約1ヶ月働いており、VC++を使って自動Excelプログラムをコーディングしようとしています。私はwchar_t *とunsigned long longを連結しようとしています。最初のステップは、unsigned long longをwchar_t *に「変換する」ことです。私はコード全体を投げてしまったことをお詫びしますが、私が目指していることを示し、コードに他の弱点があるかどうかを示すのに役立つと思います。unsigned long longをwchar_t *に変換して連結します。
wchar_t * ex(wchar_t * dest, unsigned long long num);
int main()
{
unsigned long long num = 10;
wchar_t *dest= L"A2:B";
wchar_t * Path=ex(dest, num);
VARIANT param;
param.vt = VT_BSTR;
// param.bstrVal = SysAllocString(L"A2:B10");
param.bstrVal = SysAllocString(Path);
getchar();
return 0;
}
wchar_t * ex(wchar_t * dest, unsigned long long num)
{
// Convert num to wchar_t *
wchar_t *rangeMax = (wchar_t *)num;
// I think this is used to eliminate extra space in other solutions
// but not here. It could be useful.
const int MAX_CHARS = 50;
size_t count = wcsnlen_s(dest, MAX_CHARS);
wprintf(L"The length of the string is %ld characters\n", count);
// Throw dest into buf
wchar_t buf[25] = { 0 };
int r = wcscpy_s(buf, 25, dest);
if (r != 0) {
wprintf(L"wcscpy_s() failed %ld", r);
}
r = wcscat_s(buf, 25, rangeMax);
if (r != 0) {
wprintf(L"wcscat_s() failed %ld", r);
}
wprintf_s(buf);
return buf;
}
exはzetcodeの編集例です。私はそれが解決に近いと思うが、bufとrangeMaxを組み合わせると、コードはあらゆる種類のメモリ例外をスローして失敗する。
連結されたwchar_t *の最終的な出力先は、VARIANTからSysAllocStringまでのBSTRです。
私はコードの改善と実際にコードを実行する方法についてお勧めします。
あなたがのstd :: wstring' '取得するために' unsingned長いlong'に[STD :: to_wstring](http://www.cplusplus.com/reference/string/to_wstring/)を使用することができます。次に、その文字列から 'wchar_t *'を得るか、 'std :: wstring'(これは簡単です)で動作します。 – Serikov
このコードにはいくつかのバグがあります。ローカル変数へのポインタを返す関数。メモリをリークする関数。型キャストの間違い。この全体を書き直す必要があります。 –
助けてくれてありがとう! wchar_t * string2 =(WCHAR *)string.c_str(); ' –