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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 07:39   #1
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию Использование длл, написанной на С++, в программе на ВБ 6

Мне нужно использовать в программе, написанной на Visual Basic 6.0, длл, написанную на С++

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

Сама программа на Бейсике такая:
Код:
Private Declare Sub Sort Lib "Sortik_Sort_N_Alg.dll" (array1() As String, ByVal narray As Long)

Dim A(6) As String

Private Sub Form_Load()
    A(0) = "2"
    A(1) = "3"
    A(2) = "5"
    A(3) = "6"
    A(4) = "7"
    A(5) = "1"
    A(6) = "9"
    Call Sort(A, 7)
End Sub
Процедура Sort берется из библиотеки, ее код такой:

Код:
#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;
	OneMore = TRUE;
	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[ii] > s2[ii])
				{
					OneMore = TRUE;
					break;
				}
				else
				{
					if (s1[ii] < s2[ii])
					{
						OneMore = FALSE;
						break;
					};
				};
			};
		};	
};

void WINAPI Sort(char** iArray, const int Mas_4isla_Razmer) 
{ 
	int ii, jj;
	char* yyashik;
	bool Flag;
	Flag = TRUE;
	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; 
			} 
		} 
	}
}
Библиотека должна обеспечивать сортировку длинных чисел, поэтому работаю со строками

Программа при обращении к процедуре вылетает сама, и еще сама среда вылетает. Говорит, что какая-то инструкция обратилась по адресу и память не может быть read. Что делать?
Гончий вне форума Ответить с цитированием
Старый 01.06.2010, 10:33   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Может стоит написать так?
Код:
void WINAPI Sort(string [] iArray, const int Mas_4isla_Razmer);
А в какой именно момент она вылетает?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 01.06.2010 в 10:37.
Syuf вне форума Ответить с цитированием
Старый 01.06.2010, 12:12   #3
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

Вылетает в момент вызова функции Sort. Дальше нее не идет

Цитата:
Может стоит написать так?
Так у меня длл не компилируется, говорит, что "string" неизвестный идентификатор
Гончий вне форума Ответить с цитированием
Старый 01.06.2010, 12:15   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Хороший подход, а включить
Код:
#include <string>     // или #include <cstring> или #include <string.h>
using std::string;
вы не хотите?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.06.2010, 12:16   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Скорее всего проблема и есть в этом сомнительном переводе из String(6) в char**
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.06.2010, 12:32   #6
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

Спасибо, все сделал, как сказали. Выходит 8 ошибок, несколько недовольны функцией strlen
Гончий вне форума Ответить с цитированием
Старый 01.06.2010, 12:41   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А с чем вы ее применяете?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.06.2010, 12:51   #8
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

Код:
void WINAPI Srav(string s1, string s2, bool OneMore)
{
	int ii;
	OneMore = TRUE;
	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[ii] > s2[ii])
				{
					OneMore = TRUE;
					break;
				}
				else
				{
					if (s1[ii] < s2[ii])
					{
						OneMore = FALSE;
						break;
					};
				};
			};
		};	
};
Гончий вне форума Ответить с цитированием
Старый 01.06.2010, 12:53   #9
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А какие именно ошибки?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.06.2010, 13:01   #10
Гончий
Пользователь
 
Регистрация: 29.05.2010
Сообщений: 21
По умолчанию

На строчку "if (strlen(s1) > strlen(s2)) OneMore = TRUE;"

Error C2664: 'strlen' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called



На строчку "void WINAPI Sort(string[] iArray, const int Mas_4isla_Razmer) "

fatal error C1004: unexpected end of file found
Гончий вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение из Delphi к DLL написанной на C++ smirnoff843 Общие вопросы Delphi 6 21.03.2017 11:13
Как использовать в Delphi-программе функции из DLL, написанной на C# АТИКОН Общие вопросы Delphi 12 19.03.2013 08:28
Использование системного времени или даты в программе DuM4uK Общие вопросы Delphi 4 13.10.2009 15:13
Откат написанной программы фЁдОр Свободное общение 13 20.12.2007 11:35
Использование длл Anatolij Win Api 1 02.01.2007 19:54