HSPで実現しようと思ったのですがあまりにも遅すぎるので実用的ではありませんでした
そこでDLLを利用し高速化しようとしたのですがあいにくDLLは門外漢でうまくできません
なんとかWebの情報を見て整数や浮動点小数などは受け渡しできるようになったのですが
文字列の受け渡しはいくら試しても何らかの問題がでてしまいます
一番うまくいったかと思うコードを載せてみますので問題点を指摘して頂けないでしょうか
C言語側
IDE : Visual Studio Express 2013
プロジェクト設定(変更点) :
文字セット(マルチバイト文字セットに)
ランタイムライブラリ(マルチスレッド(/MT))
ヘッダーファイル内、"dllmain.h"
#ifdef _MAKE_DLL_
# define __PORT __declspec(dllexport) /* DLLを作る場合 */ #else # define __PORT __declspec(dllimport) /* DLLを使う場合 */ #endif __PORT char MyFunction(char*);
ソースファイル内、"dllmain.c"
#define _MAKE_DLL_
#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "dllmain.h" #include "string.h" __PORT char MyFunction(char *buff) { char *buf = strcat(buff, buff); return *buf; }
HSP側
#uselib "DLL.dll"
#cfunc MyFunction "MyFunction" sptr buff = "STRING" mes MyFunction(buff)
このコードで実現したい挙動は"STRING"を2倍にして"STRINGSTRING"と表示することです
実際にVCでビルドした際には全くエラーは出ませんがHSPファイルのあるフォルダに
できたDLLを移してHSPコードを実行するとフリーズしてしまいます