![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Гость_Arkady |
|
|||
|
Unregistered |
Приветствую!!!
Прроблема такая - код #include <vcl.h> ... CopyFile(src, dest, false); ... , скомпиленный в Windows XP, не хотит работать в Windows 98 (ничего не делает). Я обращался в разные форумы, были советы даже побитового чтения, но.. полумерой стала сборка проекта в 98. Такой "девяносто восьмой" проект в маздае работает. Но отказывается работать в Xp - просто ничего не делает. Исследовал, пришел к выводу, что адреса вызова функций из kernel32.dll (или откуда они вызываются) в разных версиях MS разные (ха, открыл Америку [smile] ). Проблема связана с VCL? Пробовал прикола ради вместо VCL инклудить хидер windows.h - проблема решается. Но тогда исчезают визуальные компоненты DateTime Pcker и иже с ним. А хочется красоты. Как быть? Переметнуться во вражеский лагерь Visual Studio с MFC? Не хочется... С уважением, Аркадий. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
Модератор: перенесено из C++:Общие вопросы.
--------------------
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 1 Всего: 44 |
ты возьми и в зависимости от винды бери адрес CopyFiles из соответствующей длл и копируй себе на здоровье
|
|||
|
||||
| The Thing |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 286 Регистрация: 6.9.2004 Репутация: нет Всего: 3 |
Не знаю... пробовал через fstream.h открывать файлы... работало и в 98 и Xp.
Тоже самой про fopen(...); через структуру FILE. Может CopyFile и не работает по каким-то причинам (какие указал ты).. тогда тебе просто надо реализовать свое копирование... а еще лучше предложение chaos -------------------- Правильность работы программы зависит от двух велечин. В нужном месте должны стоять нолик и еденичка. |
|||
|
||||
| Гость_Arkady |
|
|||
|
Unregistered |
2chaos:
Вот код, которым я определял адреса вызова CopyFile HINSTANCE dllInstance; //взято из учебника Архангельского typedef void (__import * CType(char *,char *, int)); //взято из учебника Архангельского CType * CopyFil=NULL; //взято из учебника Архангельского dllInstance=LoadLibrary("kernel32.dll"); //взято из учебника Архангельского if (dllInstance) { CopyFil=(CType *)GetProcAddress(dllInstance, "CopyFileA"); // 77E711B9 if (CopyFil) // <---warn { Label1->Caption=Label1->Caption+" 2.kernel32 - ok "+IntToStr(CopyFil); } Если таким макаром вызвать копирование один раз, то все норма, но скопировать что-либо второй раз аналогичным образом уже не получается - приложение орет про Access violation. Что интересно, в строке warn CopyFil после вызова меняет свое значение на что-то левое, например с 77E711B9h на 00000024h. Как ето расценивать? Хелп, в общем. 2 The Thing: вызов fopen в 98 для копирования вызывает ошибку 3600 файловой системы. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 1 Всего: 44 |
а ты делаешь FreeLibrary ?
|
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Блин, а вы не знали - чтоль? vcl - это Builder!!! А у него такой косяк с третьей версии!!! Только в первой его не было
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| WickedA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.10.2005 Репутация: нет Всего: нет |
Привет всем! Это я, Гость_Arkady, только зарегистрированный!
2chaos: а как же, делаем-с: [code =cpp] ... CopyFil=NULL; FreeLibrary(dllInstance); ... [/code] 2takedo: а как бороться? Как тогда использовать API-шную функцию в проекте, в котором задействован VCL??? Ну сильно хоца... |
|||
|
||||
| The Thing |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 286 Регистрация: 6.9.2004 Репутация: нет Всего: 3 |
Гость_Arkady
Че за хрень... покажи как ты ее вызываешь?.. -------------------- Правильность работы программы зависит от двух велечин. В нужном месте должны стоять нолик и еденичка. |
|||
|
||||
| WickedA |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.10.2005 Репутация: нет Всего: нет |
Hi all!
2 The Thing:
А вот как выглядит мой API-шный вызов целиком:
Вот... |
||||
|
|||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
typedef void (__import * CType(char *,char *, int));
This function copies an existing file to a new file. A remote application programming interface (RAPI) version of this function exists, named CeCopyFile (RAPI). BOOL CopyFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists ); Parameters lpExistingFileName [in] Long pointer to a null-terminated string that specifies the name of an existing file. lpNewFileName [in] Long pointer to a null-terminated string that specifies the name of the new file. bFailIfExists [in] Boolean that specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds. Return Values Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError. Remarks Что интересно, в строке warn CopyFil после вызова меняет свое значение на что-то левое, например с 77E711B9h на 00000024h. Как ето расценивать? именно из-за потери возврата у Вас VOID надо BOOL Это сообщение отредактировал(а) SergeCpp - 18.1.2007, 08:54 |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 3 Всего: 5 |
Не понимаю связь между Апи и VCL -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| WickedA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.10.2005 Репутация: нет Всего: нет |
И снова здрасти!
Все это хорошо, но хочется знать, почему мой проект с API-шной функцией CopyFile, содержащий vcl, скомпилированный и собранный в WinXP, не захотел копировать файл в Win98. 2 SergeCPP: адрес возврата теряется именно из-за неверного определения типа? Я попробую... Но что ж мне теперь, обе свои книги Архангельского в трэш посылать? |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
Добавлено @ 19:22 если скомпилить в 98-м, то и в ХР работать будет. Хотя странно, ведь адреса функций в таком случае одинаковые должны быть? Что-то тут не то! |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
1. Вместо Архангельского следует читать Страуструпа — о языке,
Джеффри Рихтера — о WinAPI, Свена Шрайбера и Неббета и Соломона с Руссиновичем — о Native API (три книги) Всего — пять книг Шестая работа (не книга) — прекрасные комментарии Сергея Деревяго тут И вообще, его страница по C++ 2. Вообще, причём тут адреса, друзиа! Почему Вы, СЭР, не линкуете с KERNEL32.LIB ? И не нужна будет эта не нужная (в данном случае) катавасия А хеадер — если функция не описана, сделайте описание в своём хеадере |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |