コードの使い回しや部品(サブルーチンや関数)の再利用、ライブラリー化、構造化などは、C++が騒ぎ出す遥か以前からC言語で導入済みでした。
今、C++ってどうなの? 影が薄くなったって言うか風前の灯、一歩手前?
他の簡潔明瞭な言語に取って代わられつつあり、C++其の物が孤立無援というか、ガラパゴス化(複雑怪奇)感満載というか・・・。
それはさて置き。
ずぼらのめんどくさがり屋は、IDEなんて使いこなせる訳が有りません。DOS窓(コマンドプロンプト)にcl入れて、コンパイルするのが関の山。
試しに、C++ ⇒ CのDLL、C ⇒ C++のDLLを呼び出すだけのサンプルを作ってみました。
お試し環境
WindowsXP 32bit Edition
Visual C++ 2008
/*---- C++ ⇒ C の dll 作成 ---------- コマンドライン ---------------------*/
D:\vc2008\dllchk>cl /LD testc.c /link /def:testc.def
(ライブラリ testc.lib も dll と一緒に作成されます)
D:\vc2008\dllchk>cl testpp.cpp testc.lib
/*----------------------------------------------------------------------------*/
/*---- C ⇒ C++ の dll 作成 ---------- コマンドライン ----------------------*/
D:\vc2008\dllchk>cl /LD testpp.cpp /link /def:testpp.def
(ライブラリ testpp.lib も dll と一緒に作成されます)
D:\vc2008\dllchk>cl testc.c testpp.lib
/*----------------------------------------------------------------------------*/
/*---- C++ ⇒ C の dll 呼出し -------- お試し結果 --------------------------*/
D:\vc2008\dllchk>testpp
Cのサブルーチン1が呼ばれました
Cのサブルーチン2が呼ばれました
Cのサブルーチン3が呼ばれました
/*----------------------------------------------------------------------------*/
/*---- C ⇒ C++ の dll 呼出し -------- お試し結果 --------------------------*/
D:\vc2008\dllchk>testc
C++のサブルーチン1が呼ばれました
C++のサブルーチン2が呼ばれました
C++のサブルーチン3が呼ばれました
/*----------------------------------------------------------------------------*/
/*==== C++ ⇒ C の dll 呼出し ======== お試しソース ========================*/
/*---- testc.def -------------------------------------------------------------*/
LIBRARY testc
EXPORTS
subc1
subc2
subc3
/*----------------------------------------------------------------------------*/
/*---- testc.c ---------------------------------------------------------------*/
#include <stdio.h>
void subc1(void)
{
printf("Cのサブルーチン1が呼ばれました\n");
}
void subc2(void)
{
printf("Cのサブルーチン2が呼ばれました\n");
}
void subc3(void)
{
printf("Cのサブルーチン3が呼ばれました\n");
}
/*----------------------------------------------------------------------------*/
/*---- testpp.cpp ------------------------------------------------------------*/
#include <cstdio>
extern "C" void subc1(void);
extern "C" void subc2(void);
extern "C" void subc3(void);
void main(void)
{
subc1();
subc2();
subc3();
}
/*----------------------------------------------------------------------------*/
/*============================================================================*/
/*==== C ⇒ C++ の dll 呼出し ======== お試しソース ========================*/
/*---- testpp.def ------------------------------------------------------------*/
LIBRARY testpp
EXPORTS
subpp1
subpp2
subpp3
/*----------------------------------------------------------------------------*/
/*---- testc.c ---------------------------------------------------------------*/
#include <stdio.h>
extern void subpp1(void);
extern void subpp2(void);
extern void subpp3(void);
void main(void)
{
subpp1();
subpp2();
subpp3();
}
/*----------------------------------------------------------------------------*/
/*---- testpp.cpp ------------------------------------------------------------*/
#include <cstdio>
extern "C" void subpp1(void)
{
printf("C++のサブルーチン1が呼ばれました\n");
}
extern "C" void subpp2(void)
{
printf("C++のサブルーチン2が呼ばれました\n");
}
extern "C" void subpp3(void)
{
printf("C++のサブルーチン3が呼ばれました\n");
}
/*----------------------------------------------------------------------------*/
/*============================================================================*/