ゲーム制作ツール RPGツクール全般 【RGSS】DLLを作ろう【導入編】 返信先: 【RGSS】DLLを作ろう【導入編】

前回のソースの解説みたいなの  

sample.h

extern "C"{
 __declspec(dllexport) int Version(void);
 __declspec(dllexport) int Calc(int, int);
}

関数の定義とマングリング防止のおまじないです。※マングリング:cppのコンパイラでコンパイルすると名前が複雑に変換されてしまう。(オーバーライド等があるため)

sample.cpp

#include 
#include "sample.h"

ヘッダファイルの取り込みウィンドウズもろもろとさっきのヘッダ。 Pathを「<>」で囲むとデフォルトのパスから。ダブルクォーテーションで囲むとファイルのパスから探すようになります。

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
 switch (fdwReason)
 {
 case DLL_PROCESS_ATTACH:
 break;
case DLL_PROCESS_DETACH:
 break;
case DLL_THREAD_ATTACH:
 break;
case DLL_THREAD_DETACH:
 break;
 }
 return TRUE;
}

DLLを組み込んだときとか解放するときに呼ばれる関数です。とりあえず書いときましょう。 関数呼び終わったら大体すぐDLLの解放処理が呼ばれますが走でないときもあります。変数のスコープ等には注意しましょう。 ツクールを×ボタンで終了したときとかは呼ばれないこともまれによくあるので最後に必ず実行しないと逝けない処理とかはここに依存しない方がいいです。  

/* 整数をだけの関数 */
int Version(void)
{
 return 838861;
}

数字を返してるだけです。バージョンとかリビジョンとか返すようにしてると後々助かることもあるかも。  

/* 引数二つをかけて返すだけ */
int Calc(int x, int y)
{
 return x * y;
}

  引数二つをかけ算して返してるだけです。   入出力が数値だけですむなら大体こんな感じで逝けます。

 

文字列等の数値以外の型はポインタとか参照とか呼ばれるメモリ上の住所に当たる数字を指定したり返したりします。その辺は次回