Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 01:19   #1
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию Длл библиотека на С++

Всем привет
Я пишу курсовую. Одна из частей - написать длл библиотеку на С++. Сам в С++ почти не разбираюсь, начал только его изучать. Суть такая

В длл две функции - сравнения и сортировки. Функции сортировки передается массив строк, потом две строки передаются функции сравнения

Ошибка: "cannot convert parametr 1 from char to chat[]"

Заголовки функций такие:
void WINAPI Srav(char s1[], const char s2[], bool OneMore)

void WINAPI Sort(char iArray[], const int Mas_4isla_Razmer, bool Vector)

s1 и s2 - строки, iArray - массив строк

Помогите, пожалуйста, нюансов многих не знаю
Гончий вне форума Ответить с цитированием
Старый 30.05.2010, 06:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Показывайте как их вызываете.
p51x вне форума Ответить с цитированием
Старый 30.05.2010, 11:05   #3
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию Текст программы

Функция сортировки вызывает сравнение
Код:
void WINAPI Sort(char iArray[], const int Mas_4isla_Razmer, bool Vector) 
{ 
	int ii, jj, yyashik;
	bool Flag;
	if (Vector)
	{
		for (ii = 0; ii < Mas_4isla_Razmer - 1; ii++) 
		{ 
		    for(jj = ii + 1; jj < Mas_4isla_Razmer; jj++) 
			{ 
		Srav(iArray[ii], iArray[jj], Flag); 
				if (Flag)
				{
					yyashik = iArray[jj]; 
					iArray[jj] = iArray[ii]; 
					iArray[ii] = yyashik; 
				} 
			} 

		}
	}
	else
	{  
		for (ii=0; ii < Mas_4isla_Razmer - 1; ii++) 
		{ 
			for ( jj = ii+1; jj < Mas_4isla_Razmer; jj++) 
			{ 	  
		Srav(iArray[jj], iArray[ii], Flag); 
				if (Flag)
				{ 
					yyashik = iArray[ii]; 
					iArray[ii] = iArray[jj]; 
					iArray[jj] = yyashik; 
				} 
			} 

		}
	}

}
Не знаю, как табуляцию сохранить, уж простите

Последний раз редактировалось Stilet; 31.05.2010 в 13:07.
Гончий вне форума Ответить с цитированием
Старый 31.05.2010, 10:57   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
Srav(iArray[ii], iArray[jj], Flag);
iArray - это массив, iArray[ii] - это элемент массива.
Код:
void WINAPI Srav(char s1[], const char s2[], bool OneMore)
s1 - это массив.
Таким образом, вы вместо массива передаете в качестве аргумента элемент массива (вместо char[] - char). Именно об этом вам компилятор и говорит.
Что вы тут хотели сделать?
Цитата:
Не знаю, как табуляцию сохранить, уж простите
Использовать вместо тега QUOTE тег CODE (значок # справа от тега цитаты).

From Stilet: Уже поправил.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Stilet; 31.05.2010 в 13:08.
Гром вне форума Ответить с цитированием
Старый 31.05.2010, 12:46   #5
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

Дело в том, что я уже пробовал писать вот так:

void WINAPI Srav(char s1, char s2, bool OneMore)

Но в этом случае у меня при компиляции 14 ошибок двух типов
1. 'strlen': cannot convert parametr 1 from char to const char (при всяком использование strlen такая ошибка)
2. subscript requires array or pointer type(когда я сравниваю символы: s1[kk] > s2[kk], например. Просто в Паскале так можно, поэтому подумал, что и в С++ можно)


При "char s1[], char s2[]" только две ошибки, когда я вызываю функцию Srav
Гончий вне форума Ответить с цитированием
Старый 31.05.2010, 12:57   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вам нужно работать со строкой. Зачем вы передаете функции отдельный символ?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 31.05.2010, 13:01   #7
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

iArray - это массив строк
Гончий вне форума Ответить с цитированием
Старый 31.05.2010, 13:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне помнится что строка передается по указателю:
void WINAPI Srav(char* s1, char* s2, bool OneMore)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.05.2010, 13:23   #9
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

Сделал, сейчас выглядит все вот так:

Код:
#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID)
{
	switch(fdwReason)
	{
		case DLL_PROCESS_ATTACH:
			break;
		case DLL_PROCESS_DETACH:
			break;
	}
	return TRUE;
}

void WINAPI Srav(char* s1, char* s2, bool OneMore)
{
	int ii, kk;
	OneMore = TRUE;
	if (s1[strlen(s1)] > s2[strlen(s2)])  OneMore = TRUE;
	else 
	{
		if (s1[strlen(s1)] < s2[strlen(s2)]) OneMore = FALSE;
		else
			if (strlen(s1) > strlen(s2)) OneMore = TRUE;
			else
				if (strlen(s1) < strlen(s2)) OneMore = FALSE;
				else
				{
					for (ii = strlen(s1) - 1; ii > 1; ii++)
					{
						if (s1[kk] > s2[kk])
						{
							OneMore = TRUE;
							break;
						}
						else
						{
							if (s1[kk] < s2[kk])
							{
								OneMore = FALSE;
								break;
							};
						};
					};
					if (s1[strlen(s1)] == "0") OneMore = !OneMore;
				};
	};	
};

void WINAPI Sort(char iArray[], const int Mas_4isla_Razmer, bool Vector) 
{ 
	int ii, jj, yyashik;
	bool Flag;
	if (Vector)
	{
		for (ii = 0; ii < Mas_4isla_Razmer - 1; ii++) 
		{ 
		    for(jj = ii + 1; jj < Mas_4isla_Razmer; jj++) 
			{ 
				Srav(iArray[ii], iArray[jj], Flag); 
				if (Flag)
				{
					yyashik = iArray[jj]; 
					iArray[jj] = iArray[ii]; 
					iArray[ii] = yyashik; 
				} 
			} 

		}
	}
	else
	{  
		for (ii=0; ii < Mas_4isla_Razmer - 1; ii++) 
		{ 
			for ( jj = ii+1; jj < Mas_4isla_Razmer; jj++) 
			{ 	  
				Srav(iArray[jj], iArray[ii], Flag); 
				if (Flag)
				{ 
					yyashik = iArray[ii]; 
					iArray[ii] = iArray[jj]; 
					iArray[jj] = yyashik; 
				} 
			} 

		}
	}

}
4 ошибки:
2 таких: "cannot convert parametr 1 drom 'char' to 'char*'(это в строках, где вызываю функцию сравнения)

" '==':conversion from 'char' to 'int' "(строчка if (s1[strlen(s1)] == "0") OneMore = !OneMore; )

" '==': 'int' differs in levels of indirection from 'char[2]'"(эта же строчка)
Гончий вне форума Ответить с цитированием
Старый 31.05.2010, 13:36   #10
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Код:
if (s1[strlen(s1)-1] == '0') OneMore = !OneMore;
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длл на х32 CrystaLize Общие вопросы C/C++ 1 25.12.2009 17:58
Ошибка в длл Яр|/||< (^_^) Общие вопросы Delphi 2 16.10.2009 15:58
ДЛЛ на gcс Иллидан Общие вопросы C/C++ 1 12.10.2008 22:11
Фрэймы из ДЛЛ SunKnight Общие вопросы Delphi 4 06.01.2008 16:32
Использование длл Anatolij Win Api 1 02.01.2007 19:54