プラグインとして使用するためにdllにコンパイルする必要があるSqueakから生成された.cファイルがありますが、私はその方法はわかりません。私はインターネットを検索しようとしましたが、私が見つけることができるのは、dllにc#とC++をコンパイルする方法に関する情報です。生成されたコードは次のとおりです。c-codeをダイナミックリンクライブラリにコンパイル
/* Automatically generated from Squeak on (13 July 2016 9:46:45 pm) */
#if defined(WIN32) || defined(_WIN32) || defined(Win32)
#ifdef __cplusplus
#define DLLEXPORT extern "C" __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllexport)
#endif /* C++ */
#else
#define DLLEXPORT
#endif /* WIN32 */
#include "sqVirtualMachine.h"
/* memory access macros */
#define byteAt(i) (*((unsigned char *) (i)))
#define byteAtput(i, val) (*((unsigned char *) (i)) = val)
#define longAt(i) (*((int *) (i)))
#define longAtput(i, val) (*((int *) (i)) = val)
#include <string.h>
/*** Variables ***/
struct VirtualMachine* interpreterProxy;
const char *moduleName = "TestPlugin 13 July 2016 (e)";
/*** Functions ***/
DLLEXPORT int primitiveAdd(void);
DLLEXPORT int primitiveFetchString(void);
DLLEXPORT int setInterpreter(struct VirtualMachine* anInterpreter);
DLLEXPORT int primitiveAdd(void) {
int operand1;
int operand2;
int result;
operand1 = interpreterProxy->stackIntegerValue(1);
operand2 = interpreterProxy->stackIntegerValue(0);
if (interpreterProxy->failed()) {
return 0;
}
result = operand1 + operand2;
interpreterProxy->popthenPush(3, ((result << 1) | 1));
return 0;
}
DLLEXPORT int primitiveFetchString(void) {
int in;
int i;
int count;
int resultOop;
char* src;
char* dst;
char s0[] = "zero";
char s1[] = "non-zero";
in = interpreterProxy->stackIntegerValue(0);
if (interpreterProxy->failed()) {
return 0;
}
if (in == 0) {
src = s0;
} else {
src = s1;
}
count = strlen(src);
resultOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), count);
dst = ((char *) (interpreterProxy->firstIndexableField(resultOop)));
for (i = 0; i <= (count - 1); i += 1) {
dst[i] = (src[i]);
}
interpreterProxy->popthenPush(2, resultOop);
return 0;
}
DLLEXPORT int setInterpreter(struct VirtualMachine* anInterpreter) {
int ok;
interpreterProxy = anInterpreter;
ok = interpreterProxy->majorVersion() == VM_PROXY_MAJOR;
if (ok == 0) {
return 0;
}
ok = interpreterProxy->minorVersion() >= VM_PROXY_MINOR;
return ok;
}
注:これは単なるTestPluginコードです。私は実際には、このようなdllを構築して、すくい声でゆっくりと実行する私のくすんだコードの領域をスピードアップします。