MQLでDLLへ文字列を渡したいとき

tocchi2019/06/13(木) - 19:13 に投稿

MQL側はstringで渡す。

// DLLをインポートする.
#import "libConvCharSet.dll"
   // DLLで作成した関数を定義する.
   int LoadNetwork(string);
#import

DLL側はLPTSTRで受け取り、マルチバイト文字列をstringに変換する。

extern "C"
MT4_EXPFUNC int __stdcall LoadNetwork(LPTSTR  file_name)
{
    string     str = WideCharsToString(file_name);
    net.load(str);
    int    nNetSize = net.layer_size();
    return nNetSize;
}

マルチバイト文字列をstringに変換するには以下の関数を作成する。

std::string WideCharsToString(LPCTSTR src)
{
    std::string str;
#ifdef UNICODE  
    int bufSize = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, NULL, NULL, NULL);
    char* buf = new char[bufSize];
    if (WideCharToMultiByte(CP_ACP, 0, src, -1, buf, bufSize, NULL, NULL) == 0) return NULL;
    str = buf;
    delete[] buf;
#else  
    str = src;
#endif  
    return str;
}

 

タグ