HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0723
C++でHSPで利用できるDLLを作製する方法3解決


リンク

2018/7/23(Mon) 13:08:05|NO.84838

 こんにちは、お世話になります。

 C++でDLLを作成し、HSPで利用したいと考えているんですが、DLLを作成したものはいいものの、DLLを利用しようとすると、DLLの命令を呼び出している業でエラー38が発生し、呼び出すことができません。
 DLLの書き方が悪いのでしょうか。
 下記がDLLのサンプルソースとなります。
 なにか、アドバイスをいただけると幸いです。

----------

#include <iostream> #include "windows.h" int nibai(int num){ return num*2; }

----------

 なお、コンパイラはMinGWに附属するG++を利用しています。

 一応HSPのほうのソースも張っておきます。

----------

#uselib "test-dll.dll" #cfunc global nibai "nibai" int ret = nibai(5) dialog ret end

----------

 以上、よろしくお願いいたします。



この記事に返信する


Y_repeat

リンク

2018/7/23(Mon) 15:59:22|NO.84841

以下。猫さんのアドバイスです。たぶん、CもC++もそんなに変わらないかと
VC++は交換性ないですけど bccとMingwは上位交換なので

>猫
>2018/6/30(Sat) 09:41:53NO.84671
>単一ソースからなら
>gcc -shared src.c -o library.dll [スタティックリンクたち]
>複数オブジェクトからなら
>gcc -shared [スペース区切りでオブジェクトファイルたち] -o library.dll [スタティックリンクたち]
>でdllができます。
>dllの関数をhspから使うには、Cのソースファイルの先頭で
>#define dll __declspec(dllexport)
>などとしておいて、
>dll int test_func(int a, int b){return a+b;}
>のように、先頭に dll を付ければ、#func で登録できるようになります。

>猫
>2018/6/30(Sat) 09:45:17NO.84672
>言い忘れました。
>minGW gcc 6 系列では、そのままdllを作ると、無駄にサイズが大きいバイナリができるので、リリースする際には strip library.dll などとしてデバッグ情報を削除してあげると大幅にダイエットできます。あるいは、
>gcc -shared hoge.c -o library.dll || strip library.dll
>こんな感じでつなげると、勝手にやってくれます。



リンク

2018/7/24(Tue) 18:11:54|NO.84857

C++なら
#define dll extern "C" __declspec(dllexport)
にしないとだめです。



リンク

2018/7/25(Wed) 10:52:26|NO.84862

 こんにちは、お世話になります。
 返信が遅くなり、申し訳ありません。

 教えていただいた方法で、無事にHSPから呼び出せるDLLが作成できました。
 ありがとうございました。

 それでは。



ONION software Copyright 1997-2023(c) All rights reserved.