今回、ヘッダファイルで関数をリンクしているはずなのにコンパイル時にリンクエラーが出るのです
ファイルの構造は
function.hにて
GLOBAL int run(int *size,xml_struct_t dest,const _variant_t XML_SRC);
を定義
xml.cppで
#include "GV.h"
#undef max
void WriteString (const wchar_t * format, ...)
{
std::vector<wchar_t> buffer;
for (std::size_t max_count = 256; max_count < std::numeric_limits<std::size_t>::max() - 256; max_count += 256)
{
buffer.resize(max_count);
va_list vl;
va_start(vl, format);
std::size_t written = std::vswprintf(&buffer[0], max_count - 1, format, vl);
va_end(vl);
if (written >= max_count - 1)
{
continue;
}
break;
}
std::wstring stringToWrite(&buffer[0]);
DWORD written;
::WriteConsoleW(::GetStdHandle(STD_OUTPUT_HANDLE), stringToWrite.c_str(), stringToWrite.size(), &written, 0);
::OutputDebugStringW(stringToWrite.c_str());
}
int run(int *size,xml_struct_t *dest,const _variant_t XML_SRC)
{
// COMの初期化と後片付け
struct ComInitializer {
ComInitializer()
{
::CoInitialize(NULL);
}
~ComInitializer()
{
::CoUninitialize();
}
} COM_INITIALIZER;
// DOMの作成
MSXML2::IXMLDOMDocument2Ptr xmlDom;
HRESULT hr;
if (FAILED(hr = xmlDom.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER)))
{
WriteString(L"DOM Create Error (%08X)\n", hr);
return 1;
}
try
{
// APIの読み込み
xmlDom->async = VARIANT_FALSE;
xmlDom->validateOnParse = VARIANT_FALSE;
xmlDom->resolveExternals = VARIANT_FALSE;
if (xmlDom->load(XML_SRC) != VARIANT_TRUE)
{
WriteString(L"Load Error : %s\n", (LPCWSTR)xmlDom->parseError->Getreason());
return 2;
}
// APIの名前空間設定
xmlDom->setProperty(L"SelectionNamespaces", L"xmlns:A='urn:yahoo:jp:jlp'");
xmlDom->setProperty(L"SelectionLanguage", L"XPath");
std::wstring uri =xmlDom->GetnamespaceURI();
// 結果の表示
MSXML2::IXMLDOMNodeListPtr words = xmlDom->documentElement->selectNodes(L"A:ma_result//A:word[A:surface/text()][A:reading/text()][A:pos/text()]");
if(dest==NULL)
{
return *size=words->length;
}else{
for (int i = 0; i < words->length; ++i)
{
MSXML2::IXMLDOMNodePtr wordElement = words->item[i];
MSXML2::IXMLDOMTextPtr surfaceText = wordElement->selectSingleNode(L"A:surface/text()");
MSXML2::IXMLDOMTextPtr readingText = wordElement->selectSingleNode(L"A:reading/text()");
MSXML2::IXMLDOMTextPtr posText = wordElement->selectSingleNode(L"A:pos/text()");
std::wstring surface = surfaceText->text;
std::wstring reading = readingText->text;
std::wstring pos = posText->text;
char * surface_c = new char[wstr_sizeget(surface)];
cnarrow(surface,surface_c);
char * reading_c = new char[wstr_sizeget(reading)];
cnarrow(reading,reading_c);
char * pos_c = new char[wstr_sizeget(pos)];
cnarrow(pos,pos_c);
//DrawFormatStringEx(x,y,GetColor(255,255,255),"@%i : %s (%s) = %s\n", i, surface_c, reading_c, pos_c);
//y+=GetFontSize();
delete [] surface_c;
delete [] reading_c;
delete [] pos_c;
}
}
}
catch (const _com_error & e)
{
DrawFormatString(0,0,GetColor(255,255,255),"Com Exception (%08X)\n", e.Error());
DrawFormatStringEx(0,0,GetColor(255,255,255),(char*)e.ErrorMessage());
return 3;
}
return 0;
}
そしてinterface.cppで
run(NULL,xml_c[8],Request->ResponseStream);
と呼んでいるのですが
エラー 123 error LNK2019: 未解決の外部シンボル "int __cdecl run(int *,struct xml_struct_t,class _variant_t)" (?run@@YAHPAHUxml_struct_t@@V_variant_t@@@Z) が関数 "void __cdecl grammar_understander(char *)" (?grammar_understander@@YAXPAD@Z) で参照されました。
エラー 124 fatal error LNK1120: 外部参照 1 が未解決です。
となります……
謎です
いくらかいじくったのですが実体はあるし、定義はしてるし
よくわからんです
誰か助けてください・・・・