В ZScript для ZBrush, Вы можете вызвать DLL с помощью FileExecute
[FileExecute,"ZBRUSH_ZData\ZPlugs\WebZPlug.dll",HTTP_Browse,"http://www.zbrushcentral.com"]
Что такое подпись точки входа DLL (функция C / C ++) для получения аргументов и данных из ZScript? Есть ли недокументированные аргументы для маршалловых структур данных между ZScript и C ++?
После восстановления некоторой документации, которая частично отвечает на этот вопрос: вот полный FileExecute
подпись:
[FileExecute, Filename, Function to call, Optional text input, Option numeric input, Optional memory block input, Optional memory block output]
Вы можете передать блок памяти «MemBlock», созданный в ZScript:
[FileExecute, "DllName.dll", "FunctionName", "StringArgument", [MemGetSize, "MemBlock"], "MemBlock",]
Вот функция C ++ в DLL для приема вызовов от ZScript и блок памяти:
#define DLLEXPORT __declspec(dllexport)
extern "C" int DLLEXPORT FunctionName(unsigned char* message, double number, void* memblock, void* memblock2)
{
int mbSize = (int)number; // the second argument has to be a double
// Read from the memory block via a strstream
stdstrstream mbStream((char*)memblock, mbSize);
// Read the first integer written into the memory block by the ZScript
int val = 0;
mbStream.read((char*)&val, 4);
}
extern "C"
чтобы функция C ++ имела связь ‘C’ (компилятор не искажает имя), чтобы код ZBrush C мог ссылаться на нее.
Других решений пока нет …