多分、 cgfgoban.exe が恐らく x86 なので、 cgfthink.dll も x64 ではなく x86 で作らなければいけないと思う
アプリケーション( .exe
)ではなく ダイナミック ライブラリ ( .dll
)に変更
cgfthink.h
が上手く読み込めない場合は、 #include "cgfthink.h"
の箇所に そのファイルの内容をベタ書きする
UTF-8 with BOM
Computer(GTP)
ではなく Computer(DLL)
を選ぶ
以下のように直せばいいが、関連する他の箇所も直さないといけない。自力で頑張って欲しい。説明省略
// printf()の代用関数。
void PRT(const wchar_t* fmt, ...)
{
// 可変長引数か?
va_list ap;
int len;
static wchar_t text[PRT_LEN_MAX];
DWORD nw;
if (hOutput == INVALID_HANDLE_VALUE) return;
va_start(ap, fmt);
len = _vsnwprintf_s(text, PRT_LEN_MAX - 1, _TRUNCATE, fmt, ap);
va_end(ap);
if (len < 0 || len >= PRT_LEN_MAX) return;
WriteConsole(hOutput, text, (DWORD)wcslen(text), &nw, NULL);
}
Original:
char* str[4] = { "・","●","○","+" };
Refactoring:
const char* str[4] = { "・","●","○","+" };
Original:
SetConsoleTitle("CgfgobanDLL Infomation Window");
````
Refactoring:
```cpp
// 関数名の末尾にA が付いた
SetConsoleTitleA("CgfgobanDLL Infomation Window");
📖 Set console title in C++ using a string
Original:
len = _vsnprintf(text, PRT_LEN_MAX - 1, fmt, ap);
Refactoring:
// 関数名に w が含まれ、末尾に _s が付いた
// _TRUNCATE という引数が増えた
len = _vsnwprintf_s(text, PRT_LEN_MAX - 1, _TRUNCATE, fmt, ap);
多分、もともと .c
のファイルを .cpp
にすると おかしくなるのかもしれない。
大変なのでcgfgoban.cppは改造しない方がいい
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
char *st[5] = { "+","●","○","★","☆" }; // 埋まったのが黒。空洞が白
Refactoring:
```c++
const char *st[5] = { "+","●","○","★","☆" }; // 埋まったのが黒。空洞が白
他同様
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
static char *sBC[SBC_NUM] = {
"●","◆","★",
"○","◇","☆","◯", // 0x819b, 0x81fc,コードが違う。
"┏","┯","┓",
"┠","┼","┨",
"┗","┷","┛",
"・","-","+",
"|","-","+",
"┌","┬","┐",
"├","╋","┤",
"└","┴","┘",
};
Refactoring:
```c++
static const wchar_t *sBC[SBC_NUM] = {
L"●",L"◆",L"★",
L"○",L"◇",L"☆",L"◯", // 0x819b, 0x81fc,コードが違う。
L"┏",L"┯",L"┓",
L"┠",L"┼",L"┨",
L"┗",L"┷",L"┛",
L"・",L"-",L"+",
L"|",L"-",L"+",
L"┌",L"┬",L"┐",
L"├",L"╋",L"┤",
L"└",L"┴",L"┘",
};
他同様
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
void PRT(char *fmt, ...); // 可変のリストを持つprintf代用関数
Refactoring:
```c++
void PRT(const char *fmt, ...); // 可変のリストを持つprintf代用関数
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
MessageBox( ghWindow, "CgfGoBan's Internal Error!\nIf you push OK, Program will be terminated by force.", "Debug!", MB_OK);
Refactoring:
```c++
// 文字列の頭に L を付けた
MessageBox( ghWindow, L"CgfGoBan's Internal Error!\nIf you push OK, Program will be terminated by force.", L"Debug!", MB_OK);
他同様
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
LPSTR lpStr;
Refactoring:
```c++
// W が付いている方に思い切って変える
LPWSTR lpwStr;
他同様
大変なのでcgfgoban.cppは改造しない方がいい
Original:
```c++
char sTmp[256];
Refactoring:
```c++
// 仕方ないので、思い切って変える
wchar_t sTmp[256];
Original:
```c++
sprintf( sTmp,"%d手",tesuu);
Refactoring:
```c++
wsprintf( sTmp,L"%d手",tesuu);
Original:
```c++
nLen = strlen( lpwStr );
Refactoring:
```c++
nLen = wcslen( lpwStr );
📖 vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l
Original:
```c++
for (k=0;k<SBC_NUM;k++) if ( strncmp(p,sBC[k],2) == 0 ) break;
Refactoring:
```c++
for (k=0;k<SBC_NUM;k++) if ( wcsncmp(p,sBC[k],2) == 0 ) break;
芋づる式に変える
大変なのでcgfgoban.cppは改造しない方がいい
Original:
c++
strcpy(lpStr,SgfBuf);
.
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント