[C++] 206 FLTK : Visual C++への移植 その5 libファイル作成完了

[Windows11, MinGW g++ 9.2.0, Visual C++17, FLTK 1.3.8, Visual Studio 2022]

libファイルはまずclコンパイラで作成し、エラーになる場合はVisual Studioで作成しました。

29箇所あったエラーが5箇所まで減り、ようやく移植作業のゴールが見えてきました。これが終わると次はアドオンのプログラミングになります。

[C++] 205 FLTK : Visual C++への移植 その4 clコンパイラでlib, dllファイル作成

[Windows11, MinGW g++ 9.2.0, Visual C++17, FLTK 1.3.8, Visual Studio 2022]

Visual Studioでのlibファイル作成方法にヒントを得て、再度clコンパイラでライブラリ作成を試みたところうまくいきました。静的ライブラリlibと動的ライブラリdllが作成されます。

コマンドは以前のままで、cppファイルとヘッダファイルの関数の先頭に__declspec(dllexport)を付けるだけです。付けないとdllファイルのみ作成になります。

そもそも付けない場合にlibファイル、dllファイル両方作成するのが普通の感覚ではないのかと思ったりしますが、何かとクセが強いMicrosoftですから仕方ないです。

この方法でいけるとなると、Visual Studioでプロジェクトからlibファイル、dllファイルを作成するなんて面倒すぎてやってられません。

日本語まわりの仕様など洗練されているように見えるVisual C++ですが、実際に扱ってみるとなるほど中々の難物でした。まさに隣の芝はなんとやらです。

#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <ctype.h>
#include <memory>

using std::string; using std::vector;
using std::cout; using std::endl;

class Funcs{

public:
__declspec(dllexport) string capitalizeString(string);
__declspec(dllexport) int getIndex(vector<string>&, string);
};
#include "Funcs.h"

__declspec(dllexport) string Funcs::capitalizeString(string s)
{
    vector<char> s_char(s.begin(), s.end());

    vector<char> s_char_up;
    for (auto && c:s_char){
        char c_up = toupper(c);
        s_char_up.push_back(c_up);
    }

    string str(s_char_up.begin(), s_char_up.end());

    return str;
}

__declspec(dllexport) int Funcs::getIndex(vector<string> &input, string searched) {
    for (int i = 0; i < input.size(); i++) {
        if (input[i] == searched) {
            return i;
        }
    }
    return -1;
}
cl /std:c++17 /I"D:\code\VC++\mylib_vc\include" /I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include" ^
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\atlmfc\include" ^
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" ^
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\ucrt" ^
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um" ^
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared" ^
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\winrt" ^
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\cppwinrt" ^
/I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um" ^
"D:\code\VC++\mylib_vc\src\Funcs.cpp" /LD /EHsc /link /LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\ATLMFC\lib\x64" /LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\lib\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" /LIBPATH:"D:\code\VC++\mylib_vc\lib"

[C++] 204 FLTK : Visual C++への移植 その3 VSでlib, dllファイル作成

[Windows11, MinGW g++ 9.2.0, Visual C++17, FLTK 1.3.8, Visual Studio 2022]

ライブラリをclコンパイラではなく、Visual Studioでの作成に切り替えました。

今回は静的ライブラリSplit.libと動的ライブラリSplit.dllを作成しました。2時間ほど掛かりました。やはりIDEは勘弁というのが実感です。

Macならコンソールだけでサクッと作れるんですけどね。Windows(Visual Studio)がプログラミングの入口だったら、C/C++ユーザーに成れていたか微妙です。

これでエラー数は1つ減り23箇所になりました。