Abhijeet Bhurke Ответов: 1

Программа C++ (32 бит) преобразование в программу C++ (64 бит)


У меня есть программа на c++ с именем SBLIB DLL Ver 1.0 для Win32
Я хотел бы преобразовать его в 64-битный.
Я попытался преобразовать его с помощью VS 2008, но не получилось.
У меня есть нижеприведенные коды, может ли кто-нибудь мне помочь.

Я хочу использовать эту библиотеку DLL в 64-битной ОС. В настоящее время эта библиотека dll может работать во всех 32 битных ОС


Исходные файлы, как показано ниже:
======================

SBLIB.DEF
----------
;------------------------------------
; SBLIB.Файл определения модуля DEF
;------------------------------------

БИБЛИОТЕКА SBLIBVB32

ОПИСАНИЕ 'SBLIBVB32 DLL'
;EXETYPE WINDOWS
;ОКУРОК 'WINSTUB.EXE'
КОД ПРЕДНАТЯГ ПОДВИЖНЫЙ ОТБРАСЫВАЕМЫЙ
ПРЕДВАРИТЕЛЬНАЯ ЗАГРУЗКА ДАННЫХ ПОДВИЖНАЯ ОДИНОЧНАЯ
Ограничивает объем оперативной памяти 2048
Экспорт adths
хстад
уруу
chkday
gttime
sttime
mkttime
itvday
itvhr
itvmin
itvsec
endmon
дайвик
адцы
sytad
сегодня
тодр
тодмин
тодсек
localtime
ad2to4
ad4to2


SBLIB.C
--------

/*
* SBLIB DLL Ver 1.0 для Win32
*
*/



#включить <windows.h>
#включить <stdio.h>
#include <sys\types.h>
#включить <time.h>
#include <string.h>
#включить "sblib.h"


инт далеко Паскаль adths( инт ад, инт далеко *гг )
{

if( ad < 0 || ad > 99 )
возврат -1 ;

если( объявление &ГТ;=0 &&усилителя; объявление &ЛТ;= 88 )
ad += 100 ;
*hs = ad - 88 ;

возвращает 0 ;

}


инт далеко Паскаль hstad( инт гв, инт дальний *объявления )
{
если( hs <= 0 || hs > 100 )
возврат -1 ;

*ad = hs + 88 ;
если( *ad >= 100 ) *ad %= 100 ;

возвращает 0 ;
}

инт далеко Паскаль уруу( инт года )
{
int rtn = 0;

если( год < 0 )
возврат -1 ;

если ( ((год%4 == 0 ) && ( год%100 != 0 ) ) || ( год%400 == 0 ) )
rtn = 1 ;

вернуться Ростехнадзора ;
}


int FAR PASCAL chkday( TTIME FAR *ttime )
{

int year;

Если( предельный-и GT;года в < 0 || предельный-&ГТ;год &ГТ; 99 )
возврат( -1 ) ;

Если( предельный-&ГТ;пн &ЛТ; 1 || предельный-&ГТ;пн &ГТ; 12 )
возвращение( -2 ) ;

Если( предельный-&ГТ;день &ЛТ; 1 || предельный-&ГТ;день &ГТ; 31 )
возвращение( -3 ) ;

год = ad2to4(ttime->год);

переключатель( ttime->mon ) {
корпус 1 :
случай 3 :
корпус 5 :
корпус 7 :
случай 8 :
случай 10 :
случай 12 :
перерыв ;
случай 4 :
корпус 6 :
корпус 9 :
корпус 11 :
if( ttime->day > 30 ) {
возвращение( -3 ) ;
}
перерыв ;
случай 2 :
если( уруу( год ) == 1 ) {
if( ttime->day > 29 ) {
возвращение( -3 ) ;
}
}
еще {
if( ttime->day > 28 ) {
возвращение( -3 ) ;
}
}
перерыв ;

по умолчанию :
возвращение( -3 ) ;
}

Если( предельный-&ГТ;час &ЛТ; 0 || предельный-&ГТ;час &ГТ; 23 ) {
возвращение( -4 ) ;
}

Если( предельный->мин &ЛТ; 0 || предельный->мин &ГТ; 59 ) {
возвращение( -5 ) ;
}

Если( предельный-&ГТ;сек &ЛТ; 0 || предельный-&ГТ;сек &ГТ; 59 ) {
возвращение( -6 ) ;
}

возврат( 0 ) ;
}


int FAR PASCAL gttime( TTIME FAR *ttime )
{
время Т;
struct tm *tm;

То _tzset() ;

время( &t ) ;
tm = местное время( &t ) ;

ttime->year = ad4to2(tm->tm_year);
ttime->mon = tm->tm_mon + 1 ;
ttime->day = tm->tm_mday ;
ttime->hour = tm->tm_hour ;
предельный->мин = ТМ-&ГТ;tm_min ;
ttime->sec = tm->tm_sec ;

возвращает 0 ;
}


int FAR PASCAL sttime( TTIME FAR *ttime )
{
Как systemtime как systemtime;

То _tzset() ;

если( chkday( предельный ) )
возврат( -1 ) ;


Системное время.wYear = (WORD)ad2to4(ttime->year);
Системное время.wMonth = (WORD)ttime->mon;
Системное время.wDay = (WORD)ttime->День;

Системное время.wHour = (WORD)ttime->час;
Системное время.wMinute = (WORD)ttime->min ;
Системное время.wSecond = (WORD)ttime->sec ;
Системное время.wMilliseconds = 0;

if( SetLocalTime( &SystemTime ) != TRUE )
возврат( -1 );

возврат( 0 ) ;
}


инт далеко Паскаль itvday( предельных далеко *время1, предельных далеко *время2, давно далек *день )
{

для ТД1, тд2;
двойной ответ;


если( chkday( время1 ) )
возврат( -1 );

если( chkday( время2 ) )
возвращение( -2 );

ТД1 = mkttime( время1 );

тд2 = mkttime( время2 );

Анс = время( тд2, ТД1);

*день = (длинный) ( ans / 86400) ;

возврат( 0 ) ;
}

инт далеко Паскаль itvhr( предельных далеко *время1, предельных далеко *время2, долго далеко *ч )

{
для ТД1, тд2;
длинный ответ;


если( chkday( время1 ) )
возврат( -1 );

если( chkday( время2 ) )
возвращение( -2 );

ТД1 = mkttime( время1 );

тд2 = mkttime( время2 );

Анс = (длительное)время( тд2, ТД1);

*hr = (long) ( ans / 3600 );

возврат( 0 ) ;
}


инт далеко Паскаль itvmin( предельных далеко *время1, предельных далеко *время2, долго далеко *мин )
{

для ТД1, тд2;
длинный ответ;


если( chkday( время1 ) )
возврат( -1 );

если( chkday( время2 ) )
возвращение( -2 );

ТД1 = mkttime( время1 );

тд2 = mkttime( время2 );

Анс = (длительное)время( тд2, ТД1);

*min = (long)( ans / 60 );

возврат( 0 ) ;
}

инт далеко Паскаль itvsec( предельных далеко *время1, предельных далеко *время2, долго далеко *сек )
{

для ТД1, тд2;
длинный ответ;


если( chkday( время1 ) )
возврат( -1 );

если( chkday( время2 ) )
возвращение( -2 );

ТД1 = mkttime( время1 );

тд2 = mkttime( время2 );

Анс = (длительное)время( тд2, ТД1);

*sec = (long)ans;

возврат( 0 );

}


время далеко Паскаль mkttime( предельных далеко *предельный )
{
структура ТМ ТМ;
для использования функции mktime();


tm.tm_year = ad2to4(ttime->year) - 1900;
tm.tm_mon = ttime->mon - 1;
tm.tm_mday = ttime->День;
tm.tm_hour = ttime->час;
tm.tm_min = ttime->min;
ТМ.tm_sec = предельный-&ГТ;ТРЦ;

tm.tm_wday = 0;
tm.tm_yday = 0;
tm.tm_isdst= -1;

return( mktime( &tm ) );

}

инт далеко Паскаль endmon( предельных далеко *предельный, интервал далеко *mday )
{
int year ;

Если( предельный-и GT;года в < 0 || предельный-&ГТ;год &ГТ; 99 )
возврат( -1 ) ;

Если( предельный-&ГТ;пн &ЛТ; 1 || предельный-&ГТ;пн &ГТ; 12 )
возвращение( -2 ) ;

год = ad2to4(ttime->год);

переключатель( ttime->mon )
{
корпус 1 :
случай 3 :
корпус 5 :
корпус 7 :
случай 8 :
случай 10 :
случай 12 :
*mday = 31 ;
перерыв ;
случай 4 :
корпус 6 :
корпус 9 :
корпус 11 :
*mday = 30 ;
перерыв ;
случай 2 :
если( уруу( год ) == 1 )
*mday = 29 ;
еще
*mday = 28 ;
перерыв ;
по умолчанию :
возвращение( -2 ) ;
}

возврат( 0 ) ;
}

инт далеко Паскаль dyweek( предельных далеко *предельный, интервал далеко *wday )
{
структура ТМ ТМ;
инт РТК ;

РТЦ = chkday( предельный ) ;
если( ( rtc == -1 ) || ( rtc == -2 ) || ( rtc == -3 ) )
возврат( -1 ) ;

tm.tm_year = ad2to4(ttime->year) - 1900;
tm.tm_mon = ttime->mon - 1;
tm.tm_mday = ttime->День;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;

tm.tm_wday = 0;
tm.tm_yday = 0;
tm.tm_isdst= -1;

mktime( &tm );

*wday = tm.tm_wday + 1;

возврат( 0 );

}

инт далеко Паскаль adtsy( инт ад, инт далеко *сы )
{

if( ad < 26 || ad > 89 )
возврат( -1 ) ;

*sy = ad - 25 ;

возврат( 0 ) ;
}

инт далеко Паскаль sytad( сы инт, инт-дальний *объявления )
{
if( sy < 1 || sy > 64 )
возврат( -1 ) ;

*ad = sy + 25 ;

возврат( 0 ) ;
}

инт далеко Паскаль todday( предельных далеко *время1, длинный день, срочных далеко *время2 )
{
время Т1;

если( chkday( время1 ) ) {
возврат( -1 );
}
Т1 = mkttime( время1 );

t1 += день * 86400;

localtime( t1, time2 );

возврат( 0 );

}

инт далеко Паскаль todhr( предельных далеко *время1, долгий час, предельный далеко *время2 )
{
время Т1;

если( chkday( время1 ) ) {
возврат( -1 );
}
Т1 = mkttime( время1 );

t1 += hr * 3600;

localtime( t1, time2 );

возврат( 0 );

}

инт далеко Паскаль todmin( предельных далеко *время1, с длинным мин, предельный далеко *время2 )
{
время Т1;

если( chkday( время1 ) ) {
возврат( -1 );
}
Т1 = mkttime( время1 );

t1 += мин * 60;

localtime( t1, time2 );

возврат( 0 );

}

инт далеко Паскаль todsec( предельных далеко *время1, длинная сек, предельный далеко *время2 )
{
время Т1;

если( chkday( время1 ) ) {
возврат( -1 );
}
Т1 = mkttime( время1 );

t1 += сек;

localtime( t1, time2 );

возврат( 0 );

}

пустота далеко Паскаль localttime( время Т, предельный далеко *предельный )
{
struct tm *tm;
для ТС;

То _tzset() ;

ts = t;
tm = местное время( &ts ) ;

ttime->year = ad4to2(tm->tm_year);
ttime->mon = tm->tm_mon + 1 ;
ttime->day = tm->tm_mday ;
ttime->hour = tm->tm_hour ;
предельный->мин = ТМ-&ГТ;tm_min ;
ttime->sec = tm->tm_sec ;


}

int FAR PASCAL ad2to4( int ad2 )
{
если( ( ад2 &ГТ;= 70 ) и усилитель; & ( ад2 &ЛТ;= 99 ) )
возврат( ad2 + 1900);
еще
возврат( ad2 + 2000);
}

int FAR PASCAL ad4to2( int ad4 )
{
возврат( ad4 % 100);
}


Файлы ресурсов, как показано ниже
==========================
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio сгенерировала include-файл.
// Используется Script1.rc
//

// Следующие значения по умолчанию для новых объектов
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Заголовочные файлы, как показано ниже:
=====================

/*
* ФАЙЛ SBLIB HEADDER
*
*
*/
#include <sys types.h="">

структура typedef {
короткий год;
короткий пн;
короткий день;
короткий час;
короткая минута;
короткая секунда;
короткие мсек;
короче фу;
} Предельный;

time_t FAR PASCAL mkttime( TTIME FAR * );
int FAR PASCAL ad2to4( int );
int FAR PASCAL ad4to2( int );
void FAR PASCAL localtime( time_t, TTIME FAR *);
инт далеко Паскаль dyweek( предельных далеко *, инт далеко *);

Что я уже пробовал:

Я попытался загрузить 64-битный копилер в VS2008 и попытался его скомпилировать.
Он компилируется без ошибок, но когда он упоминается в программе, он не может быть использован.

David O'Neil

#1: оберните свой код в теги 'code' (< code > / < /code >) без пробелов.
#2: Дайте ошибку, которую вы получаете при попытке получить доступ к DLL с помощью 64-битной программы.

OriginalGriff

теги <pre>, а не теги <code & gt;: теги pre задействуют синтаксический маркер.
Выпадающий список "код" содержит предварительные теги, кнопка "переменная" - кодовые теги.

Не вините меня, я не разрабатывал сайт... :смеяться:

David O'Neil

Ой! Я постараюсь запомнить это в следующий раз. Я думаю, что это имеет смысл, поскольку теги " pre " - единственные, которые правильно сохраняют отступы для кода.

OriginalGriff

:смех: сегодня суббота, ни у кого мозги не заняты!

Richard MacCutchan

Вам нужно сделать то же самое, что я предложил в вашем другом вопросе, и начать знакомиться с отладчиком. И, пожалуйста, не просто сбрасывайте груз неформатированного кода таким образом и не ожидайте, что кто-то другой исправит его для вас.

Richard MacCutchan

Присмотревшись внимательнее к приведенному выше коду, я бы посоветовал вам выбросить его и начать все сначала с нуля. Большая часть кода, который вы показываете, является избыточным, поскольку он просто реплицирует существующие системные библиотеки.

1 Ответов

Рейтинг:
0

Daniel Pfeffer

15 секунд Google нашел это: Общие Рекомендации По Переносу | Microsoft Docs[^]

В которой обсуждаются проблемы преобразования 32-разрядного кода Windows в 64-разрядный. Смотрите также темы в меню слева от экрана.