Excel vba как подключить библиотеку

Проверка или добавление ссылки на библиотеку объектов Check or add an object library reference

Если как часть приложения Visual Basic используются объекты в других приложениях, может возникнуть необходимость в установке ссылки на библиотеки объектов этих приложений. If you use the objects in other applications as part of your Visual Basic application, you may want to establish a reference to the object libraries of those applications. Прежде чем это можно будет сделать, следует убедиться, что приложение предоставляет библиотеку объектов. Before you can do that, you must first be sure that the application provides an object library.

Чтобы узнать, предоставляет ли приложение библиотеку объектов To see if an application provides an object library

В меню Сервис выберите пункт Ссылки, чтобы открыть диалоговое окно Ссылки. From the Tools menu, choose References to display the References dialog box.

В диалоговом окне Ссылки отображаются все библиотеки объектов, зарегистрированные в операционной системе. The References dialog box shows all object libraries registered with the operating system. Прокрутите список для приложения, на библиотеку объектов которого хотите сослаться. Scroll through the list for the application whose object library you want to reference. Если приложение отсутствует в списке, можно воспользоваться кнопкой Обзор, чтобы выполнить поиск библиотек объектов (*.olb и *.tlb) или исполняемых файлов (*.exe и *.dll в Windows). If the application isn’t listed, you can use the Browse button to search for object libraries (*.olb and *.tlb) or executable files (*.exe and *.dll on Windows). В проекте используются ссылки, флажки которых установлены; ссылки без установленных флажков не используются, но могут быть добавлены. References whose check boxes are selected are used by your project; those that aren’t selected are not used, but can be added.

Чтобы добавить в проект ссылку на библиотеку объектов To add an object library reference to your project

Выберите ссылку на библиотеку объектов в поле Доступные ссылки в диалоговом окне Ссылки и нажмите кнопку ОК. Select the object library reference in the Available References box in the References dialog box and choose OK. Теперь проект Visual Basic содержит ссылку на библиотеку объектов приложения. Your Visual Basic project now has a reference to the application’s object library. Если открыть обозреватель объектов (нажав клавишу F2) и выбрать библиотеку приложения, в ней отобразятся объекты, предоставляемые выбранной библиотекой объектов, а также методы и свойства каждого объекта. If you open the Object Browser (press F2) and select the application’s library, it displays the objects provided by the selected object library, as well as each object’s methods and properties.

В обозревателе объектов можно выбрать класс в поле Классы и выбрать метод или свойство в поле Компоненты. In the Object Browser, you can select a class in the Classes box and select a method or property in the Members box. Для добавления синтаксиса в программный код используйте команды копирования и вставки. Use copy and paste to add the syntax to your code.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Добавление ссылки на библиотеку типов Set reference to a type library

Автоматизация (прежнее название OLE-автоматизация) позволяет использовать объекты из других приложений в коде Visual Basic. Automation (formerly OLE Automation) enables you to use objects from other applications in Visual Basic code. Приложение, которое предоставляет свои объекты для использования другими приложения, также предоставляет сведения об этих объектах в библиотеке типов. An application that provides its objects for use by other applications also provides information about those objects in a type library. Для обеспечения лучшей производительности при использовании объектов другого приложения следует задать ссылку на библиотеку типов этого приложения. To achieve the best possible performance when using another application’s objects, you should set a reference to that application’s type library.

Задание ссылки на библиотеку типов приложения To set a reference to an application’s type library

Установите флажки для приложений с библиотеками типов, на которые вы хотите ссылаться. Select the check boxes for the applications with type libraries that you want to reference.

Если вы пишете код, управляющий объектами в другом приложении, следует задать ссылку на библиотеку типов этого приложения, чтобы обеспечить лучший доступ к этим объектам. If you are writing code that manipulates objects in another application, you should set a reference to that application’s type library for best possible access to those objects. Вам не нужно задавать ссылку для использования объектов другого приложения, однако, если это сделать, появится несколько преимуществ для вашего приложения. You don’t have to set a reference to use another application’s objects, but doing so provides several advantages for your application.

Приведенный ниже код является самым быстрым способом создания переменной для представления объекта приложения Excel. The following code is the fastest way to create a variable to represent the Excel Application object.

Если вы не настроили ссылку на библиотеку типов Excel, необходимо объявить переменную как универсальную переменную типа Object. If you haven’t set a reference to the Excel type library, you must declare the variable as a generic variable of type Object. Следующий код выполняется более медленно. The following code runs more slowly.

Если ссылка на библиотеку типов приложения задана, все объекты этого приложения, а также их методы и свойства перечисляются в обозревателе объектов. If you set a reference to an application’s type library, all of its objects and their methods and properties are listed in the Object Browser. Так проще определить, какие свойства и методы доступны для каждого объекта. This makes it easy to determine what properties and methods are available to each object.

Для приложений Microsoft, которые также могут работать как серверы автоматизации, можно задавать ссылки на их библиотеки типов из другого приложения и управлять из этого приложения их объектами. For Microsoft applications that can also serve as Automation servers, you can set references to their type libraries from another application, and control their objects from that application.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Доступ к библиотекам DLL в Excel Access DLLs in Excel

Относится к: Excel 2013 | Office 2013 | Visual Studio Applies to: Excel 2013 | Office 2013 | Visual Studio

READ  Как подключить генератор маз видео

Вы можете получить доступ к функции или команде DLL в Microsoft Excel несколькими способами: You can access a DLL function or command in Microsoft Excel in several ways:

с помощью модуля кода Microsoft Visual Basic для приложений (VBA), в котором функция или команда была сделана доступной с помощью выражения Declare; Through a Microsoft Visual Basic for Applications (VBA) code module in which the function or command has been made available using a Declare statement.

через лист макросов XLM, используя функции CALL или REGISTER; Through an XLM macro sheet by using the CALL or REGISTER functions.

непосредственно с листа или из настроенного элемента в пользовательском интерфейсе. Directly from the worksheet or from a customized item in the user interface (UI).

В этой документации не рассматриваются функции XLM. Рекомендуем использовать один из двух других подходов. This documentation does not cover XLM functions. It is recommended that you use either of the other two approaches.

Для доступа к функции или команде непосредственно с листа или из настроенного элемента в пользовательском интерфейсе необходимо сначала зарегистрировать ее в Excel. To be accessed directly from the worksheet or from a customized item in the UI, the function or command must first be registered with Excel. Сведения о регистрации команд и функций см. в статье Доступ к коду XLL в Excel. For information about registering commands and functions, see Accessing XLL Code in Excel.

Вызов функций и команд DLL из VBA Calling DLL functions and commands from VBA

Вы можете получать доступ к функциям и командам DLL в VBA с помощью оператора Declare. You can access DLL functions and commands in VBA by using the Declare statement. В случае этого оператора предусмотрен один синтаксис для команд, а другой — для функций. This statement has one syntax for commands and one for functions.

Необязательные ключевые слова Public и Private определяют область импортированной функции (весь проект Visual Basic и модуль Visual Basic соответственно). The optional Public and Private keywords specify the scope of the imported function: the entire Visual Basic project or just the Visual Basic module, respectively. Имя — это имя, которое вы хотите использовать в коде VBA. The name is the name that you want to use in the VBA code. Если оно отличается от имени в библиотеке DLL, необходимо использовать указатель Alias «aliasname» и предоставить имя функции, экспортируемое библиотекой DLL. If this differs from the name in the DLL, you must use the Alias «aliasname» specifier, and you should give the name of the function as exported by the DLL. Для доступа к функции DLL с помощью ссылки на порядковый номер DLL необходимо предоставить псевдоним, который является порядковым номером с префиксом #. If you want to access a DLL function by reference to a DLL ordinal number, you must provide an alias name, which is the ordinal prefixed by #.

Команды должны возвратить void. Commands should return void. Функции должны возвращать типы, которые VBA может распознавать с помощью ByVal. Functions should return types that VBA can recognize ByVal. Это означает, что некоторые типы легче возвращаются за счет изменения имеющихся аргументов (строк, массивов, определяемых пользователем типов и объектов). This means that some types are more easily returned by modifying arguments in place: strings, arrays, user-defined types, and objects.

VBA не может проверить совпадение списка аргументов и возвращаемого значения в модуле Visual Basic со значениями, закодированными в DLL. Это необходимо внимательно проверить самостоятельно, поскольку ошибка может привести к сбою Excel. VBA cannot check that the argument list and return stated in the Visual Basic module are the same as coded in the DLL. You should check this yourself very carefully, because a mistake could cause Excel to crash.

Если аргументы команды или функции не передаются с помощью ссылки или указателя, они должны стоять после ключевого слова ByVal в объявлении arglist. When the function or command’s arguments are not passed by reference or pointer, they must be preceded by the ByVal keyword in the arglist declaration. Когда функция C/C++ принимает аргументы указателя или функция C++ принимает аргументы ссылки, они должны передаваться ByRef. When a C/C++ function takes pointer arguments, or a C++ function takes reference arguments, they should be passed ByRef. Ключевое слово ByRef можно пропустить в списке аргументов, так как оно используется по умолчанию в VBA. The keyword ByRef can be omitted from argument lists because it is the default in VBA.

Типы аргументов в C/C++ и VBA Argument types in C/C++ and VBA

Следует помнить об указанных ниже фактах при сравнении объявлений типов аргументов в C/C++ и VBA. You should note the following when you compare the declarations of argument types in C/C++ and VBA.

Тип String в VBA передается как указатель на структуру BSTR байтовых строк в режиме ByVal и как указатель на указатель в режиме ByRef. A VBA String is passed as a pointer to a byte-string BSTR structure when passed ByVal, and as a pointer to a pointer when passed ByRef.

Тип Variant в VBA, содержащий строку, передается как указатель на структуру BSTR строк Юникода из двухбайтовых знаков при передаче в режиме ByVal и как указатель на указатель в режиме ByRef. A VBA Variant that contains a string is passed as a pointer to a Unicode wide-character string BSTR structure when passed ByVal, and as a pointer to a pointer when passed ByRef.

Integer VBA — это 16-битный тип, эквивалентный signed short в C/C++. The VBA Integer is a 16-bit type equivalent to a signed short in C/C++.

Long VBA — это 32-битный тип, эквивалентный signed int в C/C++. The VBA Long is a 32-bit type equivalent to a signed int in C/C++.

VBA и C/C++ допускают определяемые пользователем типы данных (применяются операторы Type и struct соответственно). Both VBA and C/C++ allow the definition of user-defined data types, using the Type and struct statements respectively.

VBA и C/C++ поддерживают тип данных Variant, заданный для C/C++ в файлах заголовка Windows OLE/COM как VARIANT. Both VBA and C/C++ support the Variant data type, defined for C/C++ in the Windows OLE/COM header files as VARIANT.

Массивы VBA — это объекты OLE SafeArrays, определенные для C/C++ в файлах заголовка Windows OLE/COM как SAFEARRAY. VBA arrays are OLE SafeArrays, defined for C/C++ in the Windows OLE/COM header files as SAFEARRAY.

Тип данных Currency в VBA передается как структура типа CY, определенная в файле заголовка Windows wtypes.h, в режиме ByVal и как указатель на него в режиме ByRef. The VBA Currency data type is passed as a structure of type CY, defined in the Windows header file wtypes.h, when passed ByVal, and as a pointer to this when passed ByRef.

Ниже приведен пример определений эквивалентных пользовательских типов. The following is an example of equivalent user type definitions.

В некоторых случаях VBA поддерживает более широкий диапазон значений, чем Excel. VBA supports a greater range of values in some cases than Excel supports. Тип данных Double в VBA соответствует требованиям IEEE и поддерживает субнормальные числа, которые в настоящее время на листе округляются до нуля. The VBA double is IEEE compliant, supporting subnormal numbers that are currently rounded down to zero on the worksheet. Тип Date в VBA представляет даты от 1 января 0100 года, которые можно задать с помощью отрицательных сериализованных значений дат. The VBA Date type can represent dates as early as 1-Jan-0100 using negative serialized dates. Excel поддерживает сериализованные даты не меньше нуля. Excel only allows serialized dates greater than or equal to zero. Тип Currency в VBA (64-битное масштабированное целое число) позволяет добиться точности, не поддерживаемой 8-байтовыми значениями Double, и поэтому не имеет совпадений на листе. The VBA Currency type—a scaled 64-bit integer—can achieve accuracy not supported in 8-byte doubles, and so is not matched in the worksheet.

READ  Как подключить телефонную клавиатуру к компьютеру

Excel передает только значения Variant указанных ниже типов в определяемую пользователем функцию VBA. Excel only passes Variants of the following types to a VBA user-defined function.

Тип данных VBA VBA data type Битовые флаги типа Variant C/C++ C/C++ Variant type bit flags Описание Description
Double Double VT_R8 VT_R8
Boolean Boolean VT_BOOL VT_BOOL
Date Date VT_DATE VT_DATE
String String VT_BSTR VT_BSTR Строка байтов OLE Bstr OLE Bstr byte string
Диапазон Range VT_DISPATCH VT_DISPATCH Ссылки на ячейку и диапазон Range and cell references
Переменная, содержащая массив Variant containing an array VT_ARRAY VT_ARRAY VT_VARIANT VT_VARIANT Литеральные массивы Literal arrays
Ccy Ccy VT_CY VT_CY 64-битное целое число, масштабированное для достижения точности 4 знака после запятой. 64-bit integer scaled to permit 4 decimal places of accuracy.
Переменная, содержащая ошибку Variant containing an error VT_ERROR VT_ERROR
VT_EMPTY VT_EMPTY Пустые ячейки или пропущенные аргументы Empty cells or omitted arguments

Вы можете проверить тип переданного значения Variant в VBA с помощью VarType, если функция не возвращает тип значений диапазона при вызове с использованием ссылок. You can check the type of a passed-in Variant in VBA using the VarType, except that the function returns the type of the range’s values when called with references. Чтобы определить, является ли Variant объектом ссылки Range, используйте функцию IsObject. To determine if a Variant is a Range reference object, you can use the IsObject function.

В VBA можно создавать Variant, содержащие массивы переменных, назначая свойство Value Range для Variant. You can create Variants that contain arrays of variants in VBA from a Range by assigning its Value property to a Variant. Ячейки в исходном диапазоне, отформатированные с использованием стандартного денежного формата для действующих региональных параметров, преобразуются в элементы массива типа Currency. Any cells in the source range that are formatted using the standard currency format for the regional settings in force at the time are converted to array elements of type Currency. Ячейки, отформатированные как даты, преобразуются в элементы массива типа Date. Any cells formatted as dates are converted to array elements of type Date. Ячейки, содержащие строки, преобразуются в Variant BSTR с расширенными символами. Cells containing strings are converted to wide-character BSTR Variants. Ячейки, содержащие ошибки, преобразуются в Variant типа VT_ERROR. Cells containing errors are converted to Variants of type VT_ERROR. Ячейки, содержащие значения True или False типа Boolean, преобразуются в Variant типа VT_BOOL. Cells containing Boolean True or False are converted to Variants of type VT_BOOL.

Аргументы строк и переменных Variant and string arguments

Excel поддерживает внутреннюю работу со строками Юникода с расширенными символами. Excel works internally with wide-character Unicode strings. Когда определяемая пользователем функция в VBA объявлена как принимающая аргумент String, Excel преобразует передаваемую строку в байтовую строку в соответствии с языковым стандартом. When a VBA user-defined function is declared as taking a String argument, Excel converts the supplied string to a byte-string in a locale-specific way. Чтобы функции передавалась строка Юникода, определяемая пользователем функция в VBA должна принимать Variant вместо аргумента String. If you want your function to be passed a Unicode string, your VBA user-defined function should accept a Variant instead of a String argument. При выполнении этого условия функция DLL сможет принимать строку Variant BSTR с расширенными символами VBA. Your DLL function can then accept that Variant BSTR wide-character string from VBA.

Чтобы байтовая строка возвращалась в VBA из DLL, следует изменить имеющийся аргумент BSTR байтовой строки. To return a byte string to VBA from a DLL, you should modify a byte-string BSTR argument in place. Для этого следует объявить функцию DLL как принимающую указатель на BSTR в коде C/C++, а также объявить аргумент в коде VBA как ByRef varg As String. For this to work, you must declare the DLL function as taking a pointer to a pointer to the BSTR and in your C/C++ code, and declare the argument in the VBA code as ‘ ByRef varg As String‘.

Чтобы избежать проблем, связанных с памятью, необходимо обеспечить обработку только строк, которые передаются этими способами из VBA, используя функции строки OLE BSTR. You should only handle strings that are passed in these ways from VBA using the OLE BSTR string functions to avoid memory-related problems. Например, необходимо обеспечить вызов SysFreeString для освобождения памяти перед перезаписью переданной строки, а также SysAllocStringByteLen или SysAllocStringLen, чтобы назначить место для новой строки. For example, you must call SysFreeString to free the memory before overwriting the passed in string, and SysAllocStringByteLen or SysAllocStringLen to allocate space for a new string.

Вы можете обеспечить создание сообщений об ошибках на листе Excel как Variant в VBA при помощи функции CVerr с аргументами, как показано в приведенной ниже таблице. You can create Excel worksheet errors as Variants in VBA by using the CVerr function with arguments as shown in the following table. Ошибки на листе также могут быть возвращены в VBA из DLL при помощи Variant типа VT_ERROR, а также с указанными ниже значениями в поле ulVal. Worksheet errors can also be returned to VBA from a DLL using Variants of type VT_ERROR, and with the following values in the ulVal field.

Ошибка Error Значение Variant ulVal Variant ulVal value Аргумент CVerr CVerr argument
#NULL! #NULL! 2148141008 2148141008 2000 2,000
#ДЕЛ/0! #DIV/0! 2148141015 2148141015 2007 Word 2007
#ЗНАЧ! #VALUE! 2148141023 2148141023 2015 December 2015
#ССЫЛКА! #REF! 2148141031 2148141031 2023 2023
#ИМЯ? #NAME? 2148141037 2148141037 2029 2029
#ЧИСЛО! #NUM! 2148141044 2148141044 2036 2036
#Н/Д #N/A 2148141050 2148141050 2042 2042

Обратите внимание на то, что значение Variant ulVal эквивалентно значению аргумента CVerr с шестнадцатеричным значением x800A0000. Note that the Variant ulVal value given is equivalent to the CVerr argument value plus x800A0000 hexadecimal.

Вызов функций DLL непосредственно с листа Calling DLL functions directly from the worksheet

Вы не сможете получить доступ к функциям DLL Win32 с листа, если не используете, к примеру, интерфейсы VBA или XLM либо не сообщите Excel заранее о функции, ее аргументах и типе возвращаемого значения. You cannot access Win32 DLL functions from the worksheet without, for example, using VBA or XLM as interfaces, or without letting Excel know about the function, its arguments, and its return type in advance. Этот процесс называется регистрацией. The process of doing this is called registration.

Ниже приведены способы, которыми можно получить доступ к функциям DLL на листе. The ways in which the functions of a DLL can be accessed in the worksheet are as follows:

Объявите функцию в VBA, как показано выше, и получите доступ к ней через пользовательскую функцию VBA. Declare the function in VBA as described previously and access it via a VBA user-defined function.

Сначала обеспечьте вызов функции DLL с помощью CALL на листе макросов XLM, а затем — доступ к ней с помощью определяемой пользователем функции XLM. Call the DLL function using CALL on an XLM macro sheet, and access it via an XLM user-defined function.

Используйте команду XLM или VBA, чтобы вызвать функцию XLM REGISTER, которая предоставляет сведения, необходимые Excel для опознания функции при ее вводе в ячейке листа. Use an XLM or VBA command to call the XLM REGISTER function, which provides the information that Excel needs to recognize the function when it is entered into a worksheet cell.

Преобразуйте DLL в XLL и зарегистрируйте функцию с помощью функции xlfRegister C API после активации XLL. Turn the DLL into an XLL and register the function using the C API xlfRegister function when the XLL is activated.

Четвертый подход изолированный: код, регистрирующий функции, и код функций хранятся в одном объекте кода. Изменение надстройки не включает изменение листа XLM или модуля кода VBA. Чтобы сделать это с широкими возможностями управления, оставаясь в рамках возможностей API C, необходимо преобразовать DLL в XLL и загрузить получившуюся надстройку с помощью диспетчера настроек. Это позволяет Excel вызывать функцию, предоставленную библиотекой DLL, при загрузке или активации надстройки, из которой затем можно зарегистрировать все функции, которые содержит XLL, и выполнять другие задачи инициализации DLL. The fourth approach is self-contained: the code that registers the functions and the function code are both contained in the same code project. Making changes to the add-in does not involve making changes to an XLM sheet or to a VBA code module. To do this in a well-managed way while still staying within the capabilities of the C API, you must turn your DLL into an XLL and load the resulting add-in by using the Add-in Manager. This enables Excel to call a function that your DLL exposes when the add-in is loaded or activated, from which you can register all of the functions your XLL contains, and carry out any other DLL initialization.

Вызов команд DLL непосредственно из Excel Calling DLL commands directly from Excel

Команды DLL Win32 недоступны напрямую из диалоговых окон и меню Excel без интерфейса, например VBA, или без предварительной регистрации команд. Win32 DLL commands are not accessible directly from Excel dialog boxes and menus without there being an interface, such as VBA, or without the commands being registered in advance.

Получать доступ к командам DLL можно следующими способами: The ways in which you can access the commands of a DLL are as follows:

Объявите команду в VBA так, как описано выше, и получите к ней доступ с помощью макроса VBA. Declare the command in VBA as described previously and access it via a VBA macro.

Сначала обеспечьте вызов команды DLL с помощью CALL на листе макросов XLM, а затем — доступ к ней с помощью макроса XLM. Call the DLL command using CALL on an XLM macro sheet, and access it via an XLM macro.

Используйте команду XLM или VBA, чтобы вызвать функцию XLM REGISTER, которая предоставляет сведения, необходимые Excel для опознания команды при ее вводе в диалоговом окне, которое запрашивает имя команды макроса. Use an XLM or VBA command to call the XLM REGISTER function, which provides the information Excel needs to recognize the command when it is entered into a dialog box that expects the name of a macro command.

Преобразуйте DLL в XLL и зарегистрируйте команду с помощью функции xlfRegister C API. Turn the DLL into an XLL and register the command using the C API xlfRegister function.

Как упоминалось ранее в контексте функций DLL, четвертый подход является самым изолированным, так как код регистрации хранится наряду с кодом команд. Для этого необходимо преобразовать DLL в XLL и загрузить получившуюся надстройку с помощью диспетчера надстроек. Регистрация команд таким способом также позволяет присоединить команду к элементу пользовательского интерфейса, например пользовательскому меню, или настроить перехват события с вызовом команды по нажатию определенной клавиши или другому событию. As discussed earlier in the context of DLL functions, the fourth approach is the most self-contained, keeping the registration code close to the command code. To do this, you must turn your DLL into an XLL and load the resulting add-in using the Add-in Manager. Registering commands in this way also lets you attach the command to an element of the user interface, such as a custom menu, or to set up an event trap that calls the command on a given keystroke or other event.

Приложение Excel обрабатывает все команды XLL, зарегистрированные в нем, как имеющие такой вид: All XLL commands that are registered with Excel are assumed by Excel to be of the following form.

Excel игнорирует возвращаемое значение, если оно не вызывается с листа макросов XLM. В этом случае возвращаемое значение преобразуется в значение TRUE или FALSE. Таким образом, следует возвращать значение 1, если команда выполнена успешно, и 0, если она завершилась с ошибкой или была отменена пользователем. Excel ignores the return value unless it is called from an XLM macro sheet, in which case the return value is converted to TRUE or FALSE. You should therefore return 1 if your command executed successfully, and 0 if it failed or was canceled by the user.

Память DLL и многочисленные экземпляры DLL DLL memory and multiple DLL instances

Когда приложение загружает DLL, исполняемый код DLL загружается в глобальную кучу для выполнения, а для его структур данных назначается место в глобальной куче. When an application loads a DLL, the DLL’s executable code is loaded into the global heap so that it can be run, and space is allocated on the global heap for its data structures. Windows использует сопоставление памяти, чтобы эти области памяти отображались, как в процессе приложения. Таким образом приложение может получать к ним доступ. Windows uses memory mapping to make these areas of memory appear as if they are in the application’s process so that the application can access them.

Если второе приложение загружает эту библиотеку DLL, Windows не создает дополнительную копию исполняемого кода DLL, так как эта память доступна только для чтения. If a second application then loads the DLL, Windows does not make another copy of the DLL executable code, as that memory is read-only. Windows сопоставляет память исполняемого кода DLL с процессами обоих приложений. Windows maps the DLL executable code memory to the processes of both applications. Но при этом Windows выделяет другое место для частной копии структур данных DLL и сопоставляет эту копию только со вторым процессом. It does, however, allocate a second space for a private copy of the DLL’s data structures and maps this copy to the second process only. Благодаря этому одно приложение не может конфликтовать с данными DLL другого. This ensures that neither application can interfere with the DLL data of the other.

Это означает, что разработчикам DLL не следует беспокоиться, что несколько приложений (или несколько экземпляров одного приложения) будут получать доступ к статическим и глобальным переменным и структурам данных. This means that DLL developers do not have to be concerned about static and global variables and data structures being accessed by more than one application, or more than one instance of the same application. Каждый экземпляр всех приложений получает собственную копию данных DLL. Every instance of every application gets its own copy of the DLL’s data.

Разработчикам DLL следует позаботиться о том, чтобы один и тот же экземпляр приложения не вызывал DLL много раз из разных потоков, так как это может привести к состязанию за данные этого экземпляра. DLL developers do need to be concerned about the same instance of an application calling their DLL many times from different threads, because this can result in contention for that instance’s data. Дополнительные сведения см. в статье Управление памятью в Excel. For more information, see Memory Management in Excel.

Источник

Поделиться с друзьями
Как подключить и установить...
Adblock
detector