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

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

Автор: vertex4
Дата сообщения: 07.06.2007 00:40
Cheery

Цитата:
как можно передать в функцию часть массива?

передать в функцию указатель на первый элемент, значения размера полного массива, значения размера урезанного массива. Элемент двумерного массива в функции будет искаться как a[i*n+j] (i-строка, n - длина строки, j- столбец). Соответственно, ненужные исключать.
Либо - массив указателей на начала строк создавать.
Автор: Cheery
Дата сообщения: 07.06.2007 00:45
vertex4

Цитата:
Соответственно, ненужные исключать.

да это то понятно.. но у меня 5 мерный массив.. есть и меньше.. и под каждый хотелось одну и ту же функцию. похоже проще будет копировать нужные элементы в одномерный и передавать
Автор: iamrecvezitor
Дата сообщения: 07.06.2007 11:02
Qraizer
вот почему у меня не работало. У вас там head не указывает на новое начало списка, а попрежнему указывает на начало старого не инвертированного списка, который теперь являетсся хвостом. А при выводе списка я в начале делаю так
current= head ;
чтобы начать с начала списка, а так как он ссылался на последний элемент списка, то у меня и выводился всего один элемент
Автор: Qraizer
Дата сообщения: 07.06.2007 14:14
Ага. Понятно.
Цитата:

Код: struct snode
{
/* ... */
snode *next;
};

snode* ptr;

/* ... */
Автор: Zyava
Дата сообщения: 07.06.2007 23:22

Цитата:
да это то понятно.. но у меня 5 мерный массив.. есть и меньше.. и под каждый хотелось одну и ту же функцию. похоже проще будет копировать нужные элементы в одномерный и передавать


я так понимаю те элементы, которые нужно передать функции идут подряд? так почему нельзя передать функции указатель на первый элемент нужного куска n-мерного массива и длину куска?
Автор: Cheery
Дата сообщения: 07.06.2007 23:24
Zyava

Цитата:
первый элемент нужного куска n-мерного массива и длину куска?

а если я хочу передать не последнюю размерность ?
а вторую.. или четвертую
Автор: vertex4
Дата сообщения: 08.06.2007 00:18
Cheery
Если только в отдельном массиве передавать, какие именно нужны элементы. Либо разбивать на несколько блоков, в которых эл-ты идут по порядку(по каждому измерению).
[more=простейший пример, для 3-х мерного куба]

Код:
#include <iostream.h>
void func (int *a, int x1=0, int x2=0, int x=0, int y1=0, int y2=0, int y=0, int z1=0, int z2=0, int z=0);
int main(){
int a[4][4][4];
int z=0;
for (int i=0;i<4;i++)
    for (int j=0;j<4;j++)
        for (int k=0;k<4;k++)
        {a[i][j][k]=z;
        z++;
        }
func (&a[0][0][0],1,2,4,2,2,4,2,2,4); // передаем в функцию два значения, с координатами [1][2][2] и [2][2][2]
for ( i=0;i<4;i++){
    for (int j=0;j<4;j++){
        for (int k=0;k<4;k++)        
        cout<<a[i][j][k]<<" ";
            }
    cout<<endl;
}
return(0);
}
void func (int *a, int x1, int x2, int x, int y1, int y2, int y, int z1, int z2, int z)
{for (int i=x1;i<=x2;i++)
    for (int j=y1;j<=y2;j++)
        for (int k=z1;k<=z2;k++)
            cout<<a[i*y*z+j*z+k]<<endl;
}
Автор: amfius
Дата сообщения: 12.06.2007 22:45
Здравствуйте!
У меня такой вопрос:
где найти информацию по написанию динамических библиотек *.DLL (*.SO) и заголовочных файлов (*.h) на языке Си? Прочитал много книжек, но так ничего и не нашел. Разумеется, я имею ввиду GNU C (чтобы в линуксе работало), фишки от Microsoft и Borland не предлагать. Что такое dllimport, dllexport, cdecl? Как писать статические библиотеки?
Автор: TeXpert
Дата сообщения: 12.06.2007 23:22
amfius
Цитата:
фишки от Microsoft и Borland не предлагать.
и
Цитата:
Что такое dllimport, dllexport, cdecl?
-- это две вещи несовместные предлагаешь. Потому как, насколько я знаю, dllimport, dllexport -- это как раз фишки от Microsoft. Насчёт Linux -- глянб книжку "Митчел М., Оулдем Д., Самьюэл А. Программирование для Linux . Профессиональный подход, М.-С.-Пб-К., Вильямс, 2002".
Автор: amfius
Дата сообщения: 14.06.2007 22:53
А может кто-нибудь привести простенький пример написания динамической библиотеки, header-файла (*.h) и вызова библиотечной функции из основной программы на Си?

Цитата:
Насчёт Linux -- глянб книжку "Митчел М., Оулдем Д., Самьюэл А. Программирование для Linux . Профессиональный подход, М.-С.-Пб-К., Вильямс, 2002".

Да у меня не совсем Linux. Я использую Cygwin и MinGW под windows. Так что даже не знаю, подойдет ли в данном случае информация из linux литературы. Но конечная цель - желательно, что компилировалось и в Linux, и в MinGW.
Автор: TeXpert
Дата сообщения: 14.06.2007 23:35
amfius
Цитата:
А может кто-нибудь привести простенький пример написания динамической библиотеки, header-файла (*.h) и вызова библиотечной функции из основной программы на Си?
Ты опять зашифровался. Под Windows? Смотри Рихтера.
Цитата:
Да у меня не совсем Linux. Я использую Cygwin и MinGW под windows.
Мои сочувствия. Получается, химера какая-то.
Автор: veronica b
Дата сообщения: 15.06.2007 07:09
amfius

Цитата:
Но конечная цель - желательно, что компилировалось и в Linux, и в MinGW.

А мое мнение, что желательно начать с начала. Нужно вам взять "Programming Windows 95. Part II", Петцольда и посмотреть главу 19. Постепенно дойти. если это возможно, к
Linux и MinGW! Как сказал Евклид ещё больше двух тысяч лет назад - "Нет царского пути в программировании DLL"
Ну а мое мнение, если вы изучите Рихтера, "Windows для профессионалов", то все остальное там Linux и MinGW, вам покажется простым.
Автор: amfius
Дата сообщения: 16.06.2007 22:03
veronica b
Спасибо за совет! Если есть еще какие-нибудь книги по этому вопросу (даже англоязычные), постите их названия и авторов. Дело в том, что в литературе по Си, к сожалению, очень нечасто встретишь такую информацию, в основном рассказывается про сам язык.
Автор: veronica b
Дата сообщения: 17.06.2007 10:05
amfius, в выше названая книга Рихтера, "Windows для профессионалов", имеет все, что надо. Для начала возьмите лучше всего третье издание 1997 года. Кстати, DLL - это и есть "фишки" Microsoft только Microsoft!
Автор: vvsddc
Дата сообщения: 19.06.2007 14:52
Извините если не по теме... ( я не програмер)
Есть прога написанная в среде NET Framework.
Необходимо сбросить флаг с помощью команды
CorFlags.exe /32BIT-
что бы программа стала работать в 64 битной среде не под эмулятором WOW64
Суть в том что нужен пакет NET Framework version 2.0. SDK, которого у меня нет, а качать 330 Мб нет не какой возможности.
Вообщем нужна помощь может есть какая другая возможность раздобыть этот CorFlags.exe и выполнить его отдельно в камандной стоке, или я говорю глупости?
Автор: ItsJustMe
Дата сообщения: 20.06.2007 12:20
При билде конфигурации Release вылезает следующее:

LINK : warning LNK4098: defaultlib 'mfc80.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4098: defaultlib 'mfcs80.lib' conflicts with use of other libs; use /NODEFAULTLIB:library

После чего LINK выдает кучу unresolved references и не линкует

Самое любопытное, что тот же project в Debug билдится успешно. И в Debug эти две либы (mfc80d.lib и mfcs80d.lib) вообще не используются! По крайней мере, LINK их не ищет.

Если же эти либы добавить в /NODEFAULTLIB, то тогда тоже не линкуется, выдает еще бОльшую кучу unresolved references.

Кто знает, как побороть?


Добавлено:
vvsddc
В подовляющем большинстве случаев такой сброс флага пройдет успешно (если, конечно, вы не кастите указатели в int32). Но дело в том, что одного сброса флага вам будет мало. Если у вас нет самой .Net Framework x64, то ваше приложение не запустится
Ну а что касается CorFlags.exe отдельно, то вот
хттп://ifolder.ru/2420531
Автор: vvsddc
Дата сообщения: 20.06.2007 13:03

Цитата:
В подовляющем большинстве случаев такой сброс флага пройдет успешно (если, конечно, вы не кастите указатели в int32). Но дело в том, что одного сброса флага вам будет мало. Если у вас нет самой .Net Framework x64, то ваше приложение не запустится
Ну а что касается CorFlags.exe отдельно, то вот
хттп://ifolder.ru/2420531

Сам Net Framework x64 есть только не SDK , за помощь спасибо, приложение запустилось и в диспетчере задач уже нет приставки *32 , буду разбираться дальше с библиотеками которые эта оболочка загружает. (Точнее отказывается загружать 32 битные )
Автор: distance
Дата сообщения: 20.06.2007 13:05
ItsJustMe
наверное, для отладочного режима нужно указать использование отладочной версии mfc ...

Добавлено:
а, попутал. у тебя как раз с release проблемы...
что в настройке Code Generation?
используются ли другие lib'ы или implib'ы?
приведи полный текст об ошибке хотя бы одного анрезолведа.
Автор: Qraizer
Дата сообщения: 20.06.2007 13:37
ItsJustMe
Надо смотреть, с какими именно либами конфликтуют указанные. Скорее всего - несоответствуют параметры Single/Multi -threading и/или static/dynamic RTL. Например, некоторые дополнительные библиотеки построены с использованием dynamic RTL, а приложение в release компонуется со static RTL.
Автор: ItsJustMe
Дата сообщения: 20.06.2007 15:14
Project uses "MFC in a Shared DLL". В "Code Generation" соответственно стоит "Multi-threaded DLL". Полный текст анрезолвда привести сейчас не смогу - нет этого проджекта под рукой. Другие либы используются: version.lib shlwapi.lib imm32.lib HtmlHelp.lib (+ конечно же, kernel32.lib user32.lib advapi32.lib). Никакие самодельные libы не используются. Platform x86. Unicode. По логике должны юзаться mfc80u.lib, mfcs80u.lib в Release и mfc80ud.lib, mfcs80ud.lib в Debug. Они и юзаются. В Degug mfc80d.lib, mfcs80d.lib нет, вместо них mfc80ud.lib, mfcs80ud.lib, что логично. А вот в Release к mfc80u.lib, mfcs80u.lib добавляются еще и mfc80.lib, mfcs80.lib. Откуда они берутся - понять не могу. Если же их (mfc80.lib и mfcs80.lib) принудительно записать в "Ignore Specific Library", то тогда unresolved становится еще больше.
Автор: Zyava
Дата сообщения: 20.06.2007 16:54
ItsJustMe

Как вариант может попробовать создать новый проект и в нем менять настройки какие нужно? Тогда заранее известно что в дебаге и релизе настройки одинаковые - будет видно после чего начинаются анрезолвды
Автор: Qraizer
Дата сообщения: 21.06.2007 13:28

Цитата:
А вот в Release к mfc80u.lib, mfcs80u.lib добавляются еще и mfc80.lib, mfcs80.lib.
Это они же, только не юникодовые. Посмотри, куда указывают unresolvedы и выясни, нет ли там чего-нибудь явно ANSIшного.
Автор: amfius
Дата сообщения: 21.06.2007 18:48

Цитата:
Кстати, DLL - это и есть "фишки" Microsoft только Microsoft!

А как же тогда под Linux файлы с расширением *.so? Это что, тоже изобретение Microsoft?
Автор: TeXpert
Дата сообщения: 22.06.2007 03:41
amfius
Цитата:
А как же тогда под Linux файлы с расширением *.so? Это что, тоже изобретение Microsoft?
Похоже, ты взялся писать, не почитав хотя бы основную литературу. Оттого и всё сваливаешь в кучу, и оперируешь кашей. Само понятие динамической загрузки не может быть изобретением Microsoft, а вот конкретные термины -- DLL, dllimport, dllexport -- от Microsoft. Ещё на предыдущей странице ты писал
Цитата:
...фишки от Microsoft и Borland не предлагать. Что такое dllimport, dllexport, cdecl?
Это и показывает, что у тебя в голове каша по этому вопросу. Книги тебе дали, просто почитай.
Автор: amfius
Дата сообщения: 22.06.2007 11:08
TeXpert
Не спорю, наверное так и есть Пошёл учиться и читать книжки
Автор: veronica b
Дата сообщения: 27.06.2007 11:12
amfius

Цитата:
А как же тогда под Linux файлы с расширением *.so? Это что, тоже изобретение Microsoft?

TeXpert

Цитата:
Само понятие динамической загрузки не может быть изобретением Microsoft, а вот конкретные термины -- DLL, dllimport, dllexport -- от Microsoft.

По вашему уважаемый TeXpert получается, что кто то другой изобрел динамические библиотеки, а вот Microsoft только придумала термины - DLL, dllimport, dllexport. Любопытно, почему кто то другой не мог уже и придумать термины? А может все таки именно Microsoft и придумало и внедрила в практику понятие динамической библиотеки?
А если верить Джеффри Рихтеру, а оснований ему не верить нет, то

Цитата:
Динамически подключаемые библиотеки (dynamic-link libraries, DLL) — краеугольный камень операционной системы Windows, начиная с самой первой её версии. В DLL содержатся все функции Windows API. Три самые важные DLL: Kernel32.dll (управление памятью, процессами и потоками), User32.dll (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.dll (графика и вывод текста).

Получается, что понятие Windows и DLL появились вместе и взаимно связаны и не отделимы друг от друга.
Автор: RedLord
Дата сообщения: 27.06.2007 15:18
veronica b


Цитата:
А может все таки именно Microsoft и придумало и внедрила в практику понятие динамической библиотеки?


__http://en.wikipedia.org/wiki/Dynamically_loaded_library#Dynamic_linking


Цитата:

Dynamic linking was originally developed in the Multics operating system, starting in 1964. It was also a feature of MTS (the Michigan Terminal System), built in the late 1960s.[1] In Microsoft Windows, dynamically-linked libraries are called dynamic-link libraries or "DLLs".



Автор: TeXpert
Дата сообщения: 27.06.2007 20:27
veronica b
Цитата:
А может все таки именно Microsoft и придумало и внедрила в практику понятие динамической библиотеки?
С чего вы решили, что из фразы Рихтера следует такой вывод? А вот это
Цитата:
Получается, что понятие Windows и DLL появились вместе и взаимно связаны и не отделимы друг от друга
уже совсем другое. DLL -- просто реализация идеи в исполнении Microsoft. Всего лишь.
Автор: veronica b
Дата сообщения: 28.06.2007 00:00
RedLord, всегда, исключений нет, после того, как хорошая идея широко распростронилась, появляется кто то, кто утверждает, что это его идея, но у него просто не было времени её реализовать!
TeXpert, идею полета на Луну выскзал Сирано де Бержерак, но человечество достигло Луны на ракете фон Брауна вне зависимости от того, высказал бы свою идею Сирано де Бержерак или нет.
Так и здесь, выскпзал Michigan Terminal System эту идею или нет, Microsoft бы использовала DLL в любом случае.

Автор: TeXpert
Дата сообщения: 28.06.2007 09:53
veronica b Мда, просто эта идея давно уже не нова, так что в этом свете ваши высказывания вызывают по крайней мере недоумение. Или, настолько ваше сознание исказилось под влиянием этого монстра Microsoft. Хотя, должное я им отдаю, но всё равно здравый смысл превыше всего. А насчёт
Цитата:
...идею полета на Луну выскзал Сирано де Бержерак
вы точно уверены? Я бы не был столь категоричен, не удивлюсь, что эта идея высказана была ещё и древними вавилонянами.
Вы главное отклонились от предмета.
Цитата:
Так и здесь, выскпзал Michigan Terminal System эту идею или нет, Microsoft бы использовала DLL в любом случае
Я не утверждал, что Microsoft не должен использовать эту идею, я лишь сказал что эта идея им не принадлежит, так что не путайте, и не надо злостно флудить, а то мы тут занимаемся бесполезным офтопом, для этого есть специальный форум.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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