Метод Register
Этот метод регистрирует функцию из DLL в качестве метода объекта. Функция задаётся именем или ординалом. Значение аргументов "i=", "r=" и "f=" см. в примечаниях.Регистрация по имени
DWX = new ActiveXObject("DynamicWrapperX");
DWX.Register("user32.dll", "MessageBoxW", "i=hwwu", "r=l");
res = DWX.MessageBoxW(0, "Hello, world!", "Test", 4); // Вызов.
Регистрация по имени с заменой его на другое
DWX.Register("user32:BadName", "GoodName", "r=n", "f=t"); // BadName — имя функции, например, содержащее символы, // недопустимые в именах методов, или просто очень длинное.Регистрация по ординалу
DWX.Register("user32:110", "MethodName", "i=p", "r=l"); DWX.Register("user32:0x6E", "MethodName", "i=p", "r=l");Примечания
- Если файл библиотеки имеет расширение dll, его можно не указывать. Если файл не имеет расширения, имя должно быть указано с точкой на конце: "mylib."
- Для системных DLL путь указывать не нужно. Для сторонних зависит от того, где они находятся.
- Функции Windows API, принимающие или возвращающие строки, часто имеют два варианта: например, MessageBoxW для строк в Юникоде и MessageBoxA для строк в ANSI-кодировке. Букву "А" на конце можно не добавлять, DWX сделает это сам, если не найдёт функцию MessageBox, но имена юникодных функций должны указываться точно, c "W" на конце.
- Ординал можно задавать десятичным или шестнадцатеричным числом. Учтите, что ординал функции может быть разным в разных версиях библиотеки и в x86 и x64 вариантах одной и той же версии.
- Наличие аргументов "i=", "r=" и "f=" зависит от функции. Порядок их произвольный, т.к. они опознаются по префиксам.
- "i=" задаёт тип каждого из параметров функции (целое число, дробное, строка и т.п.). Может опускаться только, если функция не имеет параметров. Расшифровка буквенных обозначений здесь.
- "r=" — тип возвращаемого значения. Можно не указывать, если возвращаемое значение не нужно, даже если функция что-то возвращает.
- "f=" — флаги, влияющие на то, как будет вызываться функция. На данный момент распознаются два флага: "t" (соглашение вызова thiscall) и "l" (last error). Флаг "t" имеет смысл только для 32-битного DWX и только со 2-й версии. 64-битным и 1-й версией игнорируется. Флаг "l" означает, что после вызова функции будет вызвана API-функция GetLastError и впоследствии возвращённый ею код ошибки можно будет получить через метод LastError.