Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
21 / 21 / 10
Регистрация: 11.09.2015
Сообщений: 103

Как GetOpenFileName без CDERR_INITIALIZATION

11.09.2015, 11:55. Показов 1579. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кому-нибудь удалось в Lua 5.1 применить GetOpenFileName() из Win32 API?
В "C" аналогичный код выполняется успешно, в Lua возвращает 0, а CommDlgExtendedError() возвращает 2. Микросфт уклончиво сообщает, что чаще всего этот сбой говорит о "нехватке памяти". У меня Windows 7 x64 на ПК с 8Гб памяти.
Вложения
Тип файла: rar TestGetOpenFileName2.rar (1.1 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2015, 11:55
Ответы с готовыми решениями:

Как в VB работает GetOpenFileName?
Нужен фрагмент кода, чтобы в переменной сохранить имя файла, выбранного пользователем в стандартном диалоге 'Открыть'. Так, как делал...

Как работать с методом GetOpenFileName?
Ребят, помогите написать блок. Например, надо открыть несколько файлов из "d:\ТЕМП\фото" формата jpg как быть? с чего начать? ...

Как OpenFileDialog заменить на GetOpenFileName?
В с# не шарю! Нашел инжектор на c# и хочу переписать так что бы файл не надо было указывать. Строчки которые надо заменить с 325 по конец,...

5
21 / 21 / 10
Регистрация: 11.09.2015
Сообщений: 103
14.09.2015, 18:39  [ТС]
Похоже, никто не знает, как уговорить библиотеку "alien" в Lua 5.1 отрабатывать C-вызовы с параметрами типа pointer, которые указывают на структуры со своими полями типа pointer.
Видно придётся объезжать такую сложность, создавая C-обёртки вокруг сложных Win32-функций типа нижеприводимой. Заодно ещё будет выход в .NET. Это может оказаться вернее, чем пытать удачу ещё в одной плохо документированной библиотеке "luainterface".
Прилагаемый пример компилируется на C++ в MS Visual Studio 2010.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// cl /LD /clr MyCppDll.cpp
#include <windows.h>
#include <string>
using namespace System;
#using "System.Windows.Forms.dll"
using namespace System::Windows::Forms;
 
#pragma managed
int ShowIt (int len, char* str) {
  String ^s  = gcnew String (str, 0, len);
  MessageBox::Show (s->Replace('\0', '~'), "From .NET");
  return 123;
}
#pragma unmanaged
extern "C" int WINAPI DllMain (HINSTANCE hInstance
    ,DWORD fdReason, PVOID pvReserved) {
  return TRUE;
}
extern "C" __declspec (dllexport) int MyFunction (int len, char *str) {
  return ShowIt (len, str);
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.09.2015, 16:56
Цитата Сообщение от Kudryashov_R_D Посмотреть сообщение
Видно придётся объезжать такую сложность, создавая C-обёртки вокруг сложных Win32-функций типа нижеприводимой.
Ничего сложно нет, как обычно написать модуль и за экспортировать, регистрировать ф-цию, структуру просто развернуть в N-параметров или луа-таблицу.
0
21 / 21 / 10
Регистрация: 11.09.2015
Сообщений: 103
15.09.2015, 17:33  [ТС]
Если нет ничего сложного, может не стоит гонять меня по интернету, а ПРОСТО указать, что надо исправить в коде TestGetOpenFileName2.rar, специально для этого и приложенного к вопросу в первом сообщении от 11.09.2015 11:55?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.09.2015, 17:52
Я хз чтом вас у за код, и что в нем исправить.

На Lua пишут не многие, тем более как то глупо думать что кто-то за вас будет разбираться с какой-то там либой за вас.

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Ничего сложно нет,
Это касалось написания собственного модуля использования "GetOpenFileName() из Win32 API"
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.09.2015, 19:57
Вот вам пример модуля, а там уже сами допишите.

lua:
Code
1
2
3
local FileDialog = require "FileDialog"
 
print(FileDialog.GetOpenFileName(""))
FileDialog.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef FileDialogH
#define FileDialogH
 
#ifdef __DLL__
#define DLL_SPEC extern "C" __declspec(dllexport)
 
#else
#define DLL_SPEC extern "C" __declspec(dllimport)
#endif // __DLL__
 
#define LUA_LIB
extern "C"
{
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}
 
DLL_SPEC int luaopen_FileDialog(lua_State *L);
 
#endif
FileDialog.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// FileDialog.cpp: определяет экспортированные функции для приложения DLL.
//
#define __DLL__
#include "FileDialog.h"
 
#include <windows.h>
 
#pragma comment(lib,"lua5.1.lib")
#pragma comment(lib,"lua51.lib")
 
static int GetOpenFileName(lua_State *L)
{
    const char* fileName= luaL_checkstring(L,1);
    char fileNameBuffer[MAX_PATH]= "";
    strncpy(fileNameBuffer,fileName,MAX_PATH);
 
    OPENFILENAMEA ofn= {0};
    ofn.lStructSize = sizeof(ofn); 
 
    ofn.hwndOwner = 0;
    ofn.lpstrFilter= "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
    ofn.lpstrFile=   fileNameBuffer;
    ofn.nMaxFile=    MAX_PATH;
    ofn.Flags=       OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    ofn.lpstrDefExt= "txt";
    
    if(::GetOpenFileNameA(&ofn))
      lua_pushstring(L,ofn.lpstrFile);
    else
        lua_pushnil(L);
 
  return 1;
}
 
static const luaL_Reg FileDialogFunctions[] =
{
  {"GetOpenFileName",   GetOpenFileName},
  {NULL, NULL}
};
 
int luaopen_FileDialog(lua_State *L) 
{
  luaL_register(L, "FileDialog", FileDialogFunctions);
    //luaL_newlib(L, FileDialogFunctions);
  return 1;
}
Вложения
Тип файла: zip Test.zip (9.66 Мб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2015, 19:57
Помогаю со студенческими работами здесь

Как в GetOpenFileName выбрать сразу несколько файлов?
Подскажите, пожалуйста! Что отвечает за выбор сразу нескольких файлов?:( Public Declare Function GetOpenFileName Lib _ ...

GetOpenFilename в Accesse2000?
В Экселе2000 есть такая функция вывода стандартного диалога по открытия файла. В А2000 есть такая же? не хотелось бы писать свой диалог.

VS GetOpenFileName/OpenDialog
Добрый день. Переписывал код в VS2010...но он теперь не открывает OpenDialog по нажатию на кнопку.. не могу причину понять, ошибок...

GetOpenFileName не определенна
Вот код программы #include &lt;Commdlg.h&gt; #include &lt;Windows.h&gt; OPENFILENAME opendlg; char filename={0}; char...

Не вызывается GetOpenFileName
Пытаюсь вызвать GetOpenFileName, но не получается. Программа никак не реагирует на него INT_PTR CALLBACK EnterData(HWND hDlg, UINT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru