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
VC C++ AND DLL
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
Re: VC C++ AND DLL
При чём тут DLL - не очень понятно. При чём тут этот пример - не очень понятно. Укажи UNICODE ли этот проект? Как реализован LPTSTR зависит от UNICODE, хотя и имеется много функций, что "подстраиваются" к настоящему типу. Дай структуру со строками, которые надо заполнить. Чтобы "лучше видно" было.Lepsik писал(а):VC C++ & DLL
Author: Lepsik*, 28 May 2003 15:35
--------------------------------------------------------------------------------
есть dll которая читает инфу и имеет ее в CString
Только понял что копиями неких строк надо структуру заполнить, можно выбирать (в зависимости от типа строк) между разными функциями которые делают копию строки - strdup, SysAllocString. Я бы написал конструктор для этой структуры, что её заполняет, возможно с параметрами, и деструктор, что освобождает строки используя - free, SysAllocFree.
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
Dll потому что нужен был переход от оригинального текста с MFC к классическому а-ля кирниган C++ тексту - я Builder работаю.
посокльку передается чистый английкий текст, то никакого UNICODE не надо.
struct iptc_data {char *name; char *str;} // например
typedef int cdecl _stdcall (* _types)( const char *, iptc_data & );
а в dll тоже самое, только CString
посокльку передается чистый английкий текст, то никакого UNICODE не надо.
struct iptc_data {char *name; char *str;} // например
typedef int cdecl _stdcall (* _types)( const char *, iptc_data & );
а в dll тоже самое, только CString
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
// До сих пор не всё понятно...
Код: Выделить всё
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?
}