今まで、hspでちょっと足りないとか、早くしたい処理をC言語でdllとして書いていましたが、やっぱりC++に移りたいと思いました。まず、dllの実装的にこれが可能かどうか私には分からないのですが、なんかできそうな気がするので、とりあえず以下のコードを書いてみました。
ですが、以下のプログラムを実行すると、なぜかスクリプトエディタとランタイムが両方とも固まってしまいます。もっと単純な関数(C++の機能を使わない関数(の時にはできていたのですが、この原因は何でしょうか?
C言語は1年ぐらい使っていますが、C++は10分ぐらいですごめんなさい。
今はもう出ないのですが、固まるようになるまえ、一瞬「エントリポイントがない」みたいなエラーがでて、そのときは関数名がデコレーションされていました。ですが、Cで書いてたときは dllMain がなくても動いてたし、最初の return param*2; だけの関数では問題なかったし、extern "C" でデコレーションは消してるし、このへんが分かりません。
a.cpp (g++ -shared a.cpp)
a.hsp
#include <string.h> #include <iostream> #include <vector> #include <string> using namespace std; #define dll extern "C" __declspec(dllexport) vector<string> lst; dll int list_add(char* in){ string add=in; lst.push_back(add); return 1; } dll void list_show(char* out){//こっちの関数はまだ使ってない size_t i; for(i=0;i<lst.size()-1;i++){ strcat(out,lst[i].c_str()); } }
#uselib "a.dll" #func list_add "list_add" sptr #func list_show "list_show" int list_add "This " list_add "is " list_add "a " list_add "test." //このあとにshowしようと思ったんだけどその前にだめだった end
よろしくお願いいたします。