コードにはいくつか問題があります。まず、#includeディレクティブをセミコロンで終わらせるべきではありません。
しかし、主な問題は、あなたのコードがEscapeXMLを呼び出していないということです。実際にはそれを再定義しています。あなたがのstd :: wstringの(:wcoutとstd)を使用する必要があるので、EscapeXMLは、ワイド文字列(wchar_t型の*)へのポインタを期待していること
#include "stdafx.h"
#include "atlenc.h"
#include <string>
#include <iostream>
int main()
{
std::wstring test = L"& & &";
int output_size = EscapeXML(test.c_str(), test.length(), 0, 0, ATL_ESC_FLAG_ATTR);
std::wstring testout;
testout.resize(output_size);
EscapeXML(test.c_str(), test.length(), &testout[0], output_size, ATL_ESC_FLAG_ATTR);
std::wcout << testout;
return 0;
}
注:何が欲しいのはこのようなものです。入力文字列と "エスケープ"バージョンを書き込むことができるバッファの両方に渡す必要があります。
バッファがどれくらい大きくなる必要があるかわからないため、EscapeXMLをヌルポインタと呼びます。文字列を返すほとんどのWindows API関数はこれを行い、必要なバッファサイズを返します。次に、別のwstringをインスタンス化し、必要なサイズにサイズを変更して、EscapeXMLをもう一度呼び出します。今回は実際にポインタをバッファに渡します。実際、c_str()はconstポインタを返します(const_castを使用しない限り、非constポインタを期待する関数に渡すことはできません)。代わりに、testout [0]へのポインタを渡します。 wstringの内部文字列バッファ