Re[4]: Вопрос новичка
От: Gosha Украина  
Дата: 11.12.01 23:00
Оценка: 4 (1)
Здравствуйте VladD2, Вы писали:

G>>1. Про какие С-типы данных в АТЛ стоит забыть ?


VD>В смысле чтобы с _ATL_MIN_CRT компилировалось?

VD>Если да, то в про все CRT-ешные (C Run-Time библиотечные) функции и типы. Т.е. вместо strlen -> lstrlen, вместо fopen -> CreateFile...
Владислав, спасибо большое за предыдущий ответ, можно Вас еще поспрашивать?
Если можно на примере:
Допустим у меня есть такой метод
[id(3), helpstring("returns some string")] 
HRESULT GetStringValue
    (BSTR SomeString, [out, retval] BSTR stringValue);

(кстати, VB захотелось именно BSTR, это нормально?)
Я хочу в этом методе вернуть переданную мне в первом аргументе строку + "еще что-то". Если бы это был простой char* и char** тип, я бы сделал примерно так:
    ...
    GetStringValue("Some string",&stringValue);
    //stringValue="Some string  and anoter string"
    ...
void GetStringValue(char* SomeString, char** stringValue)
{
    char appendix[]=" and anoter string";
    int result_len=strlen(appendix);
    result_len+=strlen(SomeString);
    result_len++;
    *stringValue=(char*)malloc(result_len);
    memset(*stringValue,0,result_len);
    strcat(*stringValue,SomeString);
    strcat(*stringValue,appendix);
    return;
}

А вот с BSTR я никак не пойму что делать Парился с преобразованием типов и так и этак, то не компилируется, то потом черти что выводит. Владислав, если не трудно, не могли бы Вы подсказать как приведенный выше код на АТЛ выглядит. Я вот тут место даже приготовил
STDMETHODIMP CSomeClass::GetStringValue(BSTR SomeString, BSTR *stringValue)
{

}

Вообще, когда речь идет о методах, возвращающих значения, и свойствах (get_) то указатель на что им передается в качестве аргумента? На пустое место?
Со свойствами (там где строки) SysAllocString() и SysReAllocString это стандартная техника?
VD>Лучше просто читать MSDN. Там все есть.
Я ждал и боялся этого ответа Ну, читать так читать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.