В этом примере показано, как изменить справку, сгенерированную для MATLAB® интерфейс к библиотеке C++.
В этом примере показана справка по XMLPlatformUtils.Initialize
метод в Apache™ библиотеке Xerces-C + + XML-анализатора. Это содержимое получено из проекта Apache Xerces, https://xerces.apache.org и лицензирован под лицензией Apache 2.0, https://www.apache.org/licenses/LICENSE-2.0.
Чтобы создать интерфейс MATLAB к этой библиотеке, вам нужны файлы заголовков и общие файлы библиотеки. Этот пример описывает процесс сборки и показывает выход создания такой библиотеки. Однако вы не можете выполнить код, показанный в примере, если у вас нет доступа к файлам Xerces.
Для получения информации о настройке окружения смотрите Требования к Созданию интерфейсу к библиотекам C++.
Проверьте компилятор. В этом примере предполагается, что файл общей библиотеки был создан с помощью Microsoft® Визуальный C++® компилятор 2017 года.
mex -setup cpp
Определите путь myPath
к вашему .hpp
и общие файлы библиотек. Этот пример использует файл библиотеки xerces-c_3.lib
.
includePath = "myPath\include"; libFile = "myPath\lib\xerces-c_3.lib";
Идентифицируйте заголовочные файлы, необходимые для вашего интерфейса. Этот пример использует XMLPlatformUtils.Initialize
метод из PlatformUtils.hpp
файл.
headers = includePath+"\xercesc\util\PlatformUtils.hpp";
Для получения информации об определении интерфейса см. раздел «Определение интерфейса MATLAB для библиотеки C++».
Сгенерируйте файл определения библиотеки defineMyXercesLibrary.mlx
.
clibgen.generateLibraryDefinition(headers,... "IncludePath",includePath,... 'Libraries',libFile,... "Verbose",true,... "PackageName","MyXercesLibrary")
Отредактируйте defineMyXercesLibrary.mlx
файл. Этот пример разрешает неопределенные функциональные возможности для Initialize
только метод. Поиск:
C++ Signature: static void xercesc_3_1::XMLPlatformUtils::Initialize
Обновление defineArgument
операторы для locale
и nlsHome
быть строками с завершением null путем замены <MLTYPE>
с "string"
и <SHAPE>
с "nullTerminated"
. Для получения информации об обновлении кода смотрите Задать отсутствующие сведения для сигнатур MATLAB.
defineArgument(InitializeDefinition, "locale", "string", "input", "nullTerminated", "Description", "locale The locale to use for messages."); % '<MLTYPE>' can be clib.array.xerces.Char,int8,string, or char defineArgument(InitializeDefinition, "nlsHome", "string", "input", "nullTerminated", "Description", "nlsHome User specified location where MsgLoader retrieves error message files." + newline + ...
В том же методе задайте panicHandler
и memoryManager
аргументы в виде скаляров путем замены <SHAPE>
с 1
.
defineArgument(InitializeDefinition, "panicHandler", "clib.MyXercesLibrary.xercesc_3_1.PanicHandler", "input", 1, "Description", "panicHandler Application's panic handler, application owns this handler." + newline + ... defineArgument(InitializeDefinition, "memoryManager", "clib.MyXercesLibrary.xercesc_3_1.MemoryManager", "input", 1, "Description", "memoryManager Plugged-in memory manager which is owned by the" + newline + ...
Проверьте файл определения библиотеки и устраните любые ошибки.
libDef = defineMyXercesLibrary
Просмотрите автоматически сгенерированный текст справки.
className = "xercesc_3_1::XMLPlatformUtils"; methodName = "Initialize"; for i = 1:numel(libDef.Classes) if (matches(libDef.Classes(i).CPPName,className)) classID = i; for j = 1:numel(libDef.Classes(i).Methods) if (startsWith(libDef.Classes(i).Methods(j).MATLABSignature,methodName)) methodID = j; end end end end Description = libDef.Classes(classID).Methods(methodID).Description DetailedDescription = libDef.Classes(classID).Methods(methodID).DetailedDescription
Description = "clib.MyXercesLibrary.xercesc_3_1.XMLPlatformUtils.Initialize Method of C++ class xercesc_3_1::XMLPlatformUtils. Perform per-process parser initialization" DetailedDescription = "This content is from the external library documentation. Initialization <b>must</b> be called first in any client code."
Измените текст This content is from the external library documentation
отображение информации о проекте Apache Xerces. Откройте файл определения библиотеки.
edit defineMyXercesLibrary
Поиск xercesc_3_1::XMLPlatformUtils::Initialize
метод:
C++ Signature: static void xercesc_3_1::XMLPlatformUtils::Initialize
В DetailedDescription
аргумент, замените This content is from the external library documentation
с новым содержимым. Теперь линия гласит:
"DetailedDescription", "This content comes from the Apache Xerces project, https://xerces.apache.org, and is licensed under the " + newline + ... "Apache 2.0 license, https://www.apache.org/licenses/LICENSE-2.0." + newline + ...
Сохраните файл.
Проверьте обновленный текст справки.
libDef = defineMyXercesLibrary; libDef.Classes(classID).Methods(methodID).DetailedDescription
ans = "This content comes from the Apache Xerces project, https://xerces.apache.org, and is licensed under the Apache 2.0 license, https://www.apache.org/licenses/LICENSE-2.0. Initialization <b>must</b> be called first in any client code."
build(defineMyXercesLibrary)
Добавьте библиотеку к своему пути. Либо щелкните ссылку в сообщении, либо позвоните:
addPath(MyXercesLibrary)
Обновите системный путь, идентифицируя местоположение myPath
общего файла библиотеки.
dllPath = "myPath\lib"; syspath = getenv("PATH"); setenv("PATH",dllPath+";"+syspath)
Проверьте содержимое интерфейса.
summary(defineMyXercesLibrary)
Отобразите справку по Initialize
способ.
help clib.MyXercesLibrary.xercesc_3_1.XMLPlatformUtils.Initialize
clib.MyXercesLibrary.xercesc_3_1.XMLPlatformUtils.Initialize Method of C++ class xercesc_3_1::XMLPlatformUtils. Perform per-process parser initialization This content comes from the Apache Xerces project, https://xerces.apache.org, and is licensed under the Apache 2.0 license, https://www.apache.org/licenses/LICENSE-2.0. Initialization <b>must</b> be called first in any client code. Inputs locale read-only string locale The locale to use for messages. nlsHome read-only string nlsHome User specified location where MsgLoader retrieves error message files. the discussion above with regard to locale, applies to nlsHome as well. panicHandler clib.MyXercesLibrary.xercesc_3_1.PanicHandler panicHandler Application's panic handler, application owns this handler. Application shall make sure that the plugged panic handler persists through the call to XMLPlatformUtils::Terminate(). memoryManager clib.MyXercesLibrary.xercesc_3_1.MemoryManager memoryManager Plugged-in memory manager which is owned by the application. Applications must make sure that the plugged-in memory manager persist through the call to XMLPlatformUtils::Terminate() No outputs