ZScript FileExecute to DLL

В ZScript для ZBrush, Вы можете вызвать DLL с помощью FileExecute

[FileExecute,"ZBRUSH_ZData\ZPlugs\WebZPlug.dll",HTTP_Browse,"http://www.zbrushcentral.com"]

Что такое подпись точки входа DLL (функция C / C ++) для получения аргументов и данных из ZScript? Есть ли недокументированные аргументы для маршалловых структур данных между ZScript и C ++?

0

Решение

После восстановления некоторой документации, которая частично отвечает на этот вопрос: вот полный 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 мог ссылаться на нее.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]