トップページ > 記事閲覧
C言語用のDxLib.dllを作成したい
名前:ぽむ 日時: 2020/09/09 19:49

すでにあるC#用のDLLではなく、C言語用のDxLib.dllを作成したいです。(実際には他の言語で使用します) DLLのプロジェクトでlibの関数をreturnする関数を作ることで実現できるのですが、 関数を返すだけの関数というのは、呼び出しのオーバーヘッドが無駄だと思いまして。 C#用のDLLでダメな理由は、動画や3D関連、メルセンヌツイスタ等の関数が不要なのでコンパクトにしたく、 また、VC++2019の最適化などを利用したいためです。 改造用ソースのDLLプロジェクト版のようなものは、どのように作成すればよいでしょうか。
メンテ

Page: 1 |

Re: C言語用のDxLib.dllを作成したい ( No.1 )
名前:管理人 日時:2020/09/10 03:00

『関数を返すだけの関数』を介さないようにするにはかなりの大作業になりそうです DXライブラリの関数は C言語仕様ではないので、まず DxLib.h の関数の中から出力したい 関数について extern "C" { } で囲い、実際のコードが書かれている各ソースファイル ( DxGraphics.cpp や DxFile.cpp など )の関数のコードについても extern "C" { } で囲う必要があります ただ、C言語仕様ではコンパイルできない関数については、C言語仕様でコンパイルできるように 書き換える必要があります( C++ の機能は殆ど使用していないので大抵の関数は extern "C" { } で 囲むだけでそのままコンパイルが成功すると思いますが… ) あと、C言語はデフォルトでは呼び出し規約が cdecl なので、一般的な DLL の呼び出し規約の stdcall にするために、全ての関数に __stdcall という記述を追加する必要があります ( この辺りはC#版DXライブラリの中の Source フォルダの中にある DxDLL.h と DxDLL.cpp の 全ての関数に __stdcall が書かれていますので、参考にしてください ) DLLプロジェクトについては通常のDLLプロジェクトにDXライブラリのソースファイルを追加するだけでOKです ただ、UseCLib という文字列が含まれているソースファイル( DxUseCLib.cpp など )やヘッダファイルを追加すると、 コンパイルに zlib や libjpeg などの外部ライブラリが必要になりますので、UseCLib という文字列が 含まれているソースファイルやヘッダファイルはプロジェクトに追加しないようにしてください
メンテ
Re: C言語用のDxLib.dllを作成したい ( No.2 )
名前:ぽむ(解決) 日時:2020/09/10 19:02

詳しい説明と注意点、ありがとうございます。 挑戦してみます。(いったん解決とさせていただきます)
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存