Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: BagaBaga
Дата сообщения: 26.03.2013 22:15
Ну, например вот здесь у тебя
h = (b - a)/nx;
h будет, если я не ошибаюсь (нужно освежить память и посмотреть порядок приведения типов), целым числом (ты делишь на nx, которое есть int, и всё выражение в результате будет инт, который уже после выполнения операции деления в "целой" арифметике будет преобразован к типу h). Ты точно именно этого хочешь?
Автор: akaGM
Дата сообщения: 26.03.2013 22:51
Genadyruk

Цитата:
а можно по подробней
а можно подробнее o компиляторe? гнусь, MS VC?

BagaBaga

Цитата:
и всё выражение в результате будет инт
вообще-то по всем правилам результат будет типа "левого присваивания"...
Автор: BagaBaga
Дата сообщения: 27.03.2013 18:37
akaGM,
всё верно, ошибся
Автор: Genadyruk
Дата сообщения: 27.03.2013 22:26
компилятор GNU
Автор: akaGM
Дата сообщения: 27.03.2013 23:11
Genadyruk
ну так почитай его опции компиляции...

поставил бы, например
-fbounds-check
сразу бы обнаружилась ошибка индексации...
Автор: Malac
Дата сообщения: 02.04.2013 23:06
Подскажите, пожалуйста, как осуществляются на языке Си арифметические и логические операции с младшими (2 байта LOWORD) или старшими (2 байта HIWORD) разрядами значения переменной (4 байта DWORD) как на этом примере:

uint a = 0x12345678;
uint b = 0x90abcdef;
а = (uint)(LOWORD(a) + LOWORD(b));
Результат должен быть а = 0x12342467

Помогите разобраться
зы. нужен аналог как на ассемблере:
mov eax,12345678h
mov ecx,90abcdefh
add ax,cx ; eax=12342467h
Автор: ItsJustMe
Дата сообщения: 02.04.2013 23:20
Аналог не точен.

Код: add ax,cx
Автор: Malac
Дата сообщения: 03.04.2013 00:00
@ItsJustMe благодарю за помощь
Автор: kotlomoy
Дата сообщения: 03.04.2013 00:17
Malac

Цитата:
зы. нужен аналог как на ассемблере:
mov eax,12345678h
mov ecx,90abcdefh
add ax,cx ; eax=12342467h

можно так:

unsigned int a = 0x12345678;
unsigned int b = 0x90abCDef;
a = (a & 0xFFff0000) | ((a + b) & 0x0000FFff);
Автор: AZJIO
Дата сообщения: 07.04.2013 07:06
Ещё одна справка Си в CHM, оригинал скачан с этого сайта
Автор: bomzzz
Дата сообщения: 07.04.2013 21:25
примонтировал вим образ как новый раздел, он вроде как бы примонтировался потому что не удаляется файл занят, но раздел не появился - как обновить список разделов в системе с помощью системных функций причем в кернел моде?
Автор: Aktaf
Дата сообщения: 12.04.2013 13:39
Пожалуйста помогите кто может.
Вынужденно немного наловчился собирать из готового исходника свою версию ехе ки Вертуал Дуба.
Основная программа Microsoft Visual Studio 2008. Ну и чтобы она работала еще кучу всего пришлось ставить.
И вот буквально несколько дней назад со следующим бильдом программа стала шалить.
Выдала ошибки.Методом тыка понял, что исходник даже без каких либо изменений не могу собрать.
Снова открыв прежнею версию, получил те же ошибки.
Как будто до сих пор какую то часть текста в исходнике допускали писать или обозначать, а теперь это запрещено.
В программе и в дополнениях никаких изменений не было (если только по инету без спроса, втихаря не пробралось).
Вот ошибки:
18>LINK : warning LNK4224: /OPT:NOWIN98 больше не поддерживается; не учитывается
18>version.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>FilterCallbacks.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>Init.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>oshelper.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>sparseavi.obj : error LNK2019: ссылка на неразрешенный внешний символ _version_num в функции "void __cdecl CreateExtractSparseAVI(struct HWND__ *,bool)" (?CreateExtractSparseAVI@@YAXPAUHWND__@@_N@Z)
18>about.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>auxdlg.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>Crash.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>DubOutput.obj : error LNK2001: неразрешенный внешний символ "_version_num"
18>about.obj : error LNK2001: неразрешенный внешний символ "_version_time"
18>Crash.obj : error LNK2001: неразрешенный внешний символ "_version_time"
18>auxdlg.obj : error LNK2001: неразрешенный внешний символ "_version_date"
18>Crash.obj : error LNK2001: неразрешенный внешний символ "_version_buildmachine"
18>..\..\out\Release\VirtualDub.exe : fatal error LNK1120: 4 неразрешенных внешних элементов
18>Build log was saved at "file://c:\VirtualDub8\VirtualDub11047_Engl\obj\Release\VirtualDub\BuildLog.htm"
18>VirtualDub - 14 error(s), 6 warning(s)
========== Build: 17 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Найдя файл где приводиться _version_num, убрал переднее подчеркивание, ничего не изменилось, полностью те же ошибки.
---------------------------------------------------------
Вот исходник на котором появились эти ошибки:
http://www.virtualdub.org/beta/VirtualDub-1.10.4-test7-src.7z

Пожалуйста, очень надо. К этим вариантам ехе км уже не только я, но и довольно много других людей привыкли.
Не хочется их подводить. Самому и имеющаяся версия устраивает. Знающему наверняка там не сложно разобраться.
Спасибо.
Автор: ne_viens
Дата сообщения: 12.04.2013 15:40
int version_num; и другие находятся в verstub.asm, который собирается с yasm.exe
yasm проинсталирован?
Автор: Aktaf
Дата сообщения: 13.04.2013 09:59
ne_viens
Лежит тут, мне сказали его просто скопировать сюда:
c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\yasm.exe Так и работал.
Я ничего не менял. Исходники брал и вводя свои изменения собирал свой вариант.
Все работало нормально. И в последнем бильде вообще мизерное изменение было внесено.
Не пошло. Ранее собранном версии убрав что компилировано, снова попробовал и те же ошибки.
Автор: ne_viens
Дата сообщения: 13.04.2013 12:46
verstub.obj файл создаётся вообще?
Автор: Aktaf
Дата сообщения: 14.04.2013 08:32
(Извините, не сразу заметил)

Да, создается и все перечисленные с ошибками файлы тоже.
Пробовал время системника назад переводить. Тоже не помогает.

Автор: ne_viens
Дата сообщения: 14.04.2013 09:19
Тогда надо нажать Alt+F7 и добавить $(IntDir)\verstub.obj в "Configuration Properties\Linker\Input\Additional Dependencies".

Ещё лучше- собирать с VS2005 без конвертирования проекта.
Автор: Aktaf
Дата сообщения: 14.04.2013 13:47
ne_viens

Цитата:
добавить $(IntDir)\verstub.obj в "Configuration Properties\Linker\Input\Additional Dependencies".

Но он там есть, вот все что там написано:

winmm.lib vfw32.lib dxguid.lib msacm32.lib comctl32.lib shlwapi.lib $(IntDir)\verstub.obj priss.lib sylia.lib system.lib dita.lib meia.lib kasumi.lib

Там же еще и на другие файлы с расширением .obj ругается или их там указывать не нужно, зависят от verstub.obj?


Цитата:
Ещё лучше- собирать с VS2005 без конвертирования проекта

Т.е. это вместо Microsoft Visual Studio 2008 - нужно работать в Microsoft Visual Studio 2005?
Я вроде в начале там пытался и там были кучи других проблем. При всех установленных программ мне можно еще установить Microsoft Visual Studio 2005 и на ней делать или нужно будет удалять, может чего то пере устанавливать снова. Или я все тут запутаю?

Как уже писал, я ни хрена не смыслю, вот с помощью подсказок кое как получилось и до сих пор все было нормально. Вот как бы найти что теперь мешает? И как это устранить? Или обойти, мне кроме этой работы больше ничего делать не нужно. Только при выходе новых версий, делать свой вариант.

Автор: ne_viens
Дата сообщения: 15.04.2013 09:40
Ну, тогда не знаю.
Попробовал собрать- всё получилось.
VS2008 и Windows SDK уже были, поставил DirectX SDK, скопировал yasm.exe в \bin, сконвертировал проект без "versioning control", исправил на "#define _WIN32_WINNT 0x0500" в "\src\VDCapture\h\stdafx.h". Значит есть смысл всё-таки VS2008 придерживатся.
Или переинсталировать студию или разобратся с verstub.asm. Например, перенести его содержимое в другой асм файл, который подхватывается компилером.

Ошибки в других obj выскакивают из-за отсутствия verstub.obj.
Автор: Aktaf
Дата сообщения: 15.04.2013 12:38

Цитата:
Ошибки в других obj выскакивают из-за отсутствия verstub.obj.

Он же создается.

1)
Цитата:
копировал yasm.exe в \bin,

А не мог этот файл испортиться или другой версии? Может выложите куда либо?

2)
Цитата:
сконвертировал проект без "versioning control",
исправил на "#define _WIN32_WINNT 0x0500" в "\src\VDCapture\h\stdafx.h".

А вот это можно подробнее для ни грамма не грамотного?

В моем содержится следующее (по 1 ой пустой строки сверху и снизу добавил):

// Compilation workaround for high char annoyance in the Platform SDK:
//
// c:\platsdk5\include\uuids.h : warning C4819: The file contains a character that cannot
// be represented in the current code page (932). Save the file in Unicode format to
// prevent data loss
#pragma warning(disable: 4819)

#define _WIN32_WINNT 0x0400
#include <vd2/system/vdtypes.h>


Цитата:
Значит есть смысл всё-таки VS2008 придерживатся.

Уже хорошо. Остаются
Автор: AZJIO
Дата сообщения: 16.04.2013 12:22
В чём ошибка? Условие тут

Код: #pragma comment(linker, "/def:DLL.def") // Указание линкеру добавить список экспорта

// передаём коэфициеты в функцию
extern "C" __declspec(dllexport) float __stdcall Calc(float kx, float ky, float am, float step, float min, float max)
{
    float out[3] = {0, 0, 0}; // результат
    float x, y
    for (x = min; x < max; x = x + step)
    {
        for (y = min; y < max; y = y + step)
        {
            if ( (am - y * ky) / kx) = x )
            {
                out[0] = 1;
                out[1] = x;
                out[2] = y;
                return out;
            }
        }
    }
return out;
}
Автор: ne_viens
Дата сообщения: 16.04.2013 13:26
Их много там.

/def:lib.def только как аргумент передаётся линкеру, pragma не сработает,
и в этом случае extern "C" __declspec(dllexport) не нужен.

float* __stdcall а не float __stdcall

После C выражений надо ставить ;

if( ... == ...), а не if(... = ...), количество закрывающих скобок не соответствует открывающим.
Tакже из-за неточности float вычислений нельзя в лоб сравнивать float'ы, а надо сравнивать их разницу с малой величиной: if(abs(x-y) < 0.0001)
Автор: akaGM
Дата сообщения: 16.04.2013 14:07
if(abs(x-y) < 0.0001)
if(fabs(x-y) < 0.0001)

так лучше...
Автор: AZJIO
Дата сообщения: 16.04.2013 14:41

Цитата:
/def:lib.def только как аргумент передаётся линкеру, pragma не сработает,
и в этом случае extern "C" __declspec(dllexport) не нужен.

Я это совсем не понимаю. Я просто нашёл где-то пример DLL и на её основе (скелете) начал шлёпать функции. Как в итоге надо?


Цитата:
После C выражений надо ставить ;
где именно? я читал что после } ставить не обязательно они сами являются разделителями. После круглых скобок в for тоже не требуется, потому что это конструкция требующая за собой действие. Примеры посмотрел там не было ;


Цитата:
if( ... == ...), а не if(... = ...), количество закрывающих скобок не соответствует открывающим.
ошибка на for была, дальше не проверял...


Цитата:
Tакже из-за неточности float вычислений нельзя в лоб сравнивать float'ы, а надо сравнивать их разницу с малой величиной: if(abs(x-y) < 0.0001)
да я в курсе про деление с периодом типа 1/3, тут было два варианта, либо abs либо округление.

Мне вот ещё вопрос волновал, будет ли такого типа массив принят внешней программой, ведь есть массив указателей. Должна ли программа принимающая массив его адекватно воспринять или нужно структурой передавать несколько значений.
Автор: kotlomoy
Дата сообщения: 16.04.2013 18:45
AZJIO
после float x, y где точка с запятой?
Автор: Aktaf
Дата сообщения: 16.04.2013 18:46
ne_viens
Я оказывается не дописал "Уже хорошо. Остаются" - хотел написать:
Остаются 1) и 2):
1) копировал yasm.exe в \bin,  
 
А не мог этот файл испортиться или другой версии? Может выложите куда либо?  

Но, сегодня перекачал и положил  
yasm.exe
Удалил VS2008 и SP1, снова установил - ничего не изменилось, вернее - ругнулся что не может найти yasm.exe. А когда положил, все повторилось.

1) Вот это как сделать, где указывается или прописывается:

сконвертировал проект без "versioning control",  

2) а это у меня так же
---------------------------
исправил на "#define _WIN32_WINNT 0x0500" в "\src\VDCapture\h\stdafx.h".  

кроме - вместо 0x0500 - 0x0400 Имеет ли значение?
 
// Compilation workaround for high char annoyance in the Platform SDK:
//
// c:\platsdk5\include\uuids.h : warning C4819: The file contains a character that cannot
// be represented in the current code page (932). Save the file in Unicode format to
// prevent data loss
#pragma warning(disable: 4819)
 
#define _WIN32_WINNT 0x0400
#include <vd2/system/vdtypes.h>
=================================================
К стати, добавлю ссылку на свой файл, может кого заинтересует и решит помощь (удаляют почему то, как было хорошо на Народе):
http://fileshare.in.ua/7313745
Автор: ne_viens
Дата сообщения: 17.04.2013 14:08
Сейчас немогу посмотреть, так как VS только дома.

Надо просто испарвить в stdafx.h 0x400 на 0х500

Забыл про самый первый пункт сказать- надо со всех файлов проекта снять RO аттрибут, иначе проект не сконвертируется.
И ещё ошибка- не versioning control а source control.
И ещё- надо добавить пути к DirectX SDK \include и \lib в проект.


>AZJIO

Цитата:
Мне вот ещё вопрос волновал, будет ли такого типа массив принят внешней программой, ведь есть массив указателей. Должна ли программа принимающая массив его адекватно воспринять или нужно структурой передавать несколько значений.


Не будет. Надо или делать
float* ret = malloc(sizeof(ret) * 3);
в Calc() и потом free() в вызывающем коде, или
float ret[3];
Calc(1., 2., 3., 4., 5., 6., ret);
в вызывающем.
Автор: Aktaf
Дата сообщения: 17.04.2013 15:06
ne_viens

Цитата:
Сейчас немогу посмотреть, так как VS только дома.
Забыл про самый первый пункт сказать- надо со всех файлов проекта снять RO аттрибут, иначе проект не сконвертируется.
И ещё- надо добавить пути к DirectX SDK \include и \lib в проект.  

Без соблюдения этих 2-х позиций вообще не возможно что-то делать. И еще в bin, и не только, еще ссылки к:
C:\Program Files\Microsoft SDK for Windows Server 2003 R2\
C:\Program Files\Microsoft SDKs\Windows\v7.0\

Сделаны.


Цитата:
Надо просто исправить в stdafx.h 0x400 на 0х500

Вообще то не думаю что либо поменяется. Но, попробую, если будет изменение напишу.
Если нет промолчу.

 
Цитата:
И ещё ошибка- не versioning control а source control.  
Это я не понимаю о чем.
А потому вложу что программа написала как есть. В уже чисто английском варианте:
15>version.obj : error LNK2001: unresolved external symbol _version_num
15>FilterCallbacks.obj : error LNK2001: unresolved external symbol _version_num
15>Init.obj : error LNK2019: unresolved external symbol _version_num referenced in function "void __cdecl VDCPUTest(void)" (?VDCPUTest@@YAXXZ)
15>oshelper.obj : error LNK2001: unresolved external symbol _version_num
15>sparseavi.obj : error LNK2001: unresolved external symbol _version_num
15>about.obj : error LNK2001: unresolved external symbol _version_num
15>auxdlg.obj : error LNK2001: unresolved external symbol _version_num
15>Crash.obj : error LNK2001: unresolved external symbol _version_num
15>DubOutput.obj : error LNK2001: unresolved external symbol _version_num
15>about.obj : error LNK2001: unresolved external symbol _version_time
15>Crash.obj : error LNK2001: unresolved external symbol _version_time
15>auxdlg.obj : error LNK2001: unresolved external symbol _version_date
15>Crash.obj : error LNK2001: unresolved external symbol _version_buildmachine
15>..\..\out\Debug\VirtualDub.exe : fatal error LNK1120: 4 unresolved externals
15>Build log was saved at "file://c:\VirtualDub8\VirtualDub11047_rus\obj\Debug\VirtualDub\BuildLog.htm"
15>VirtualDub - 14 error(s), 4 warning(s)
========== Build: 14 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========
Автор: ne_viens
Дата сообщения: 17.04.2013 15:22
Попробуй скопировать
;--------------------------------------------
    global    version_num
    global    version_time
    global    version_date
    global    version_buildmachine

version_num    dd    35453
version_time    db    "Sat Apr 06 19:15:21 2013",0
version_date    db    "April 6, 2013",0
version_buildmachine    db    "Althena",0
;--------------------------------------------

из src\VirtualDub\verstub.asm в src\VirtualDub\source\a_chromasmoother.asm таким образом:

segment    .rdata, align=16
;--------------------------------------------
    global    version_num
    global    version_time
    global    version_date
    global    version_buildmachine

version_num    dd    35453
version_time    db    "Sat Apr 06 19:15:21 2013",0
version_date    db    "April 6, 2013",0
version_buildmachine    db    "Althena",0
;--------------------------------------------
luma_coeff2    dw    29*4, 150*4, 77*4, -1024
luma_coeff4    dw    29*4, 150*4, 77*4, -2048

segment    .text
; avg...
...

Автор: Aktaf
Дата сообщения: 17.04.2013 18:04
ne_viens
Добавились еще ошибки:
1>LINK : warning LNK4224: /OPT:NOWIN98 is no longer supported; ignored
1>a_chromasmoother.obj : error LNK2005: version_num already defined in verstub.obj
1>a_chromasmoother.obj : error LNK2005: version_time already defined in verstub.obj
1>a_chromasmoother.obj : error LNK2005: version_date already defined in verstub.obj
1>a_chromasmoother.obj : error LNK2005: version_buildmachine already defined in verstub.obj

Поглядите в лс.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.