ZScript FileExecute到DLL

时间:2016-10-15 14:01:24

标签: c++ c dll zscript

在ZScript for ZBrush 中,您可以使用FileExecute

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

从ZScript接收参数和数据的DLL的入口点(C / C ++函数)签名是什么?是否有任何未记录的参数来编组ZScript和C ++之间的数据结构?

1 个答案:

答案 0 :(得分:0)

在恢复一些部分回答这个问题的文档之后:这是完整的FileExecute签名:

[FileExecute, Filename, Function to call, Optional text input, Option numeric input, Optional memory block input, Optional memory block output]

您可以传递在ZScript中创建的内存块“MemBlock”:

[FileExecute, "DllName.dll", "FunctionName", "StringArgument", [MemGetSize, "MemBlock"], "MemBlock",]

这是DLL中用于接收来自ZScript和内存块的调用的C ++函数:

#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代码可以链接到它。