VC C++ AND DLL

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

VC C++ AND DLL

Сообщение Lepsik »

VC C++ & DLL
Author: Lepsik*, 28 May 2003 15:35

--------------------------------------------------------------------------------
есть dll которая читает инфу и имеет ее в CString

у аргумента интерфейсной функции один их параметров - структура
c полями LPTSTR.

поля структуры в dll инициализируются согласно зачитанной информации.
как лучше это делать ?

CString str = L"bla-bla";
LPTSTR in;

in = in2out( str, in );

//---------------------------------------------------------------------------
static LPTSTR in2out( CString &str, LPTSTR in )
{
LPTSTR result = NULL;
if( in != NULL )
delete [] in;
if( !str.IsEmpty() )
{
int size = str.GetLength();
if( size > NULL )
{
result = new char[size + 2];
if( result != NULL )
strncpy(result, (LPTSTR)(LPCTSTR)str, size);

}
}
return result;
}


--------------------------------------------------------------------------------
Reply | Reply to sender (private) | Synchronize
Woozy
Завсегдатай
Сообщения: 278
Зарегистрирован: 03 мар 2003, 08:55
Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA

Re: VC C++ AND DLL

Сообщение Woozy »

Lepsik писал(а):VC C++ & DLL
Author: Lepsik*, 28 May 2003 15:35

--------------------------------------------------------------------------------
есть dll которая читает инфу и имеет ее в CString
При чём тут DLL - не очень понятно. При чём тут этот пример - не очень понятно. Укажи UNICODE ли этот проект? Как реализован LPTSTR зависит от UNICODE, хотя и имеется много функций, что "подстраиваются" к настоящему типу. Дай структуру со строками, которые надо заполнить. Чтобы "лучше видно" было.

Только понял что копиями неких строк надо структуру заполнить, можно выбирать (в зависимости от типа строк) между разными функциями которые делают копию строки - strdup, SysAllocString. Я бы написал конструктор для этой структуры, что её заполняет, возможно с параметрами, и деструктор, что освобождает строки используя - free, SysAllocFree.
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

Dll потому что нужен был переход от оригинального текста с MFC к классическому а-ля кирниган C++ тексту - я Builder работаю.

посокльку передается чистый английкий текст, то никакого UNICODE не надо.

struct iptc_data {char *name; char *str;} // например

typedef int cdecl _stdcall (* _types)( const char *, iptc_data & );


а в dll тоже самое, только CString
Woozy
Завсегдатай
Сообщения: 278
Зарегистрирован: 03 мар 2003, 08:55
Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA

Сообщение Woozy »

// До сих пор не всё понятно...

Код: Выделить всё

struct iptc_data
{
	char *name;
	char *str;

	iptc_data()
	{
		name = NULL;
		str = NULL;
	}

	iptc_data(const char *i_name, const char *i_str)
	{
		init(i_name, i_str);
	}

	void init(const char *i_name, const char *i_str)
	{
		name = strdup(i_name);
		str = strdup(i_str);
	}

	~iptc_data()
	{
		if (name) free(name);
		if (str) free(str);
	}
};


//int cdecl _stdcall (* _types)( const char *, iptc_data & )
// wrong declaration _cdecl cannot be together with _stdcall

//typedef int (* _types)( const char *, iptc_data & ); 
// need function of this type?

// looks like 2 string parameters needed...
int InitStruct_iptc_data( const char *i_name, const char *i_str, iptc_data &data)
{
	data.init(i_name, i_str);

	return 0;	// what to return?
}
Ответить