WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 10:00
Оценка:
Мне потребовался IMalloc, для этого я вызываю CoGetMalloc().
Не линкует.

Создал проект с помощью WCE ATL COM AppWizard.
Изначально в списке подключаемых библиотек (Project Settings — Link — Input — Object/Library Modules) пусто.
(хотя такой же колдун для VC6 рожает там здоровенный список — на всякий случай, наверно).

Добавлял туда ole32.lib, oleaut32.lib, olece400.lib — ноль эффекта.

В общем, Need Help.

Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).
О где же вы, Frostbitten'а деянья? ( -_-; ) ... << RSDN@Home 1.0 beta 7a >>

12.09.03 18:48: Перенесено модератором из 'Прочее' — AS
Перекуём баги на фичи!
Re: WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 10:39
Оценка:
К>Мне потребовался IMalloc, для этого я вызываю CoGetMalloc().
К>Не линкует.

Вот что он пишет:
error LNK2019: unresolved external symbol __imp__CoGetMalloc referenced in function .....
error LNK2019: unresolved external symbol _OutputDebugStringA referenced in function .....

Почему он в одном случае сделал декорацию в стиле Си (_OutputDebugStringA), а в другом — вообще не пойми что (__imp__CoGetMalloc)?

CoGetMalloc объявлена как
extern "C" // это я уже экспериментировал
{
  // objbase.h (557)
  WINOLEAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC FAR* ppMalloc);
}
dynamic_cats<> ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re: WinCE, eVC, IMalloc
От: Xentrax Россия http://www.lanovets.ru
Дата: 21.05.03 10:51
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Мне потребовался IMalloc, для этого я вызываю CoGetMalloc().

К>Не линкует.

Я, коненчо, могу ошибаться, но похоже CoTaskMemAlloc/Free/Realloc — это все, что у нас есть.

К>(хотя такой же колдун для VC6 рожает там здоровенный список — на всякий случай, наверно).


WCE отличается от обычных Win

К>Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).


мы всегда MFCшным трейсом пользовались
Re: WinCE, eVC, IMalloc
От: orangy Россия
Дата: 21.05.03 10:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Добавлял туда ole32.lib, oleaut32.lib, olece400.lib — ноль эффекта.

У тебя какая версия Windows CE? Для WCE 3.0 и выше:
+Ole232.lib, здесь
Но __imp_ там все равно не должно быть, в C:\WINCE410\PUBLIC\DCOM\OAK\LIB\X86\RETAIL\ole32.def он чётко прописан, что-то не то делаешь...

К>В общем, Need Help.

В общем, Have Fun.
... << RSDN@Home 1.0 beta 7a | Сейчас среда, 17:05, слушаю тишину >>
"Develop with pleasure!"
Re[2]: WinCE, eVC, IMalloc
От: orangy Россия
Дата: 21.05.03 11:06
Оценка:
Здравствуйте, orangy, Вы писали:

Вобщем, как это выглядит изнутри:
Есть struct AFX_OLE_CALL, в котором определен указатель на функцию:
    HRESULT (STDAPICALLTYPE* pfnCoGetMalloc)(DWORD dwMemContext, LPMALLOC * ppMalloc);

далее есть такой макрос:
#define CoGetMalloc                  _afxOLE.pfnCoGetMalloc

далее есть такая фигня:
HRESULT STDAPICALLTYPE AfxThunkCoGetMalloc(DWORD dwMemContext, LPMALLOC * ppMalloc)
{
    OLELOAD_M_COMI(CoGetMalloc);
    return _afxOLE.pfnCoGetMalloc(dwMemContext, ppMalloc);
}

и соответственно экземпляр:
AFX_DATADEF AFX_OLE_CALL _afxOLE =
{
    // OLE32.DLL entry points
...
    AfxThunkCoGetMalloc,
...
};

Таким образом, ты где-то .h не тот подключил, ибо функции такой нет. Ибо в таблицу пихаются затычки, который подгружают нужные функции по мере необходимости и всё идёт через указатели на функции...
... << RSDN@Home 1.0 beta 7a | Сейчас среда, 18:05, слушаю тишину >>
"Develop with pleasure!"
Re[2]: WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 11:09
Оценка:
Здравствуйте, orangy, Вы писали:

O>Здравствуйте, Кодт, Вы писали:


O>У тебя какая версия Windows CE? Для WCE 3.0 и выше:

O>+Ole232.lib,
Читал хелп к eVC4. Там без "2"
Щас попробую.

O>Но __imp_ там все равно не должно быть, в C:\WINCE410\PUBLIC\DCOM\OAK\LIB\X86\RETAIL\ole32.def он чётко прописан, что-то не то делаешь...


Главное — как именно я что-то не то делаю?

К>>В общем, Need Help.

O>В общем, Have Fun.
Пока что вместо "...n" — "...ck"


А у тебя случаем нет какого-нибудь ATL COM проекта? Кинул бы мне .vcp + stdafx.h для образца?
Буду очень благодарен.
(merkin@mail.ru)
dynamic_cats<> ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[3]: WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 11:18
Оценка:
Здравствуйте, orangy, Вы писали:

O>Вобщем, как это выглядит изнутри:


<>

O>Таким образом, ты где-то .h не тот подключил, ибо функции такой нет. Ибо в таблицу пихаются затычки, который подгружают нужные функции по мере необходимости и всё идёт через указатели на функции...


Это потому, что у тебя MFC. Которая на уровне макросов подменяет функции.

Оригинальная же функция — объявлена в
C:\Program Files\Windows CE Tools\wce410\STANDARDSDK_410\Include\X86\ObjBase.h
строка 557

А библиотеки ole232.lib вообще нет.

Что за ботва? Может, SDK не так собрался?
(=^.^=) Neko ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[4]: WinCE, eVC, IMalloc
От: orangy Россия
Дата: 21.05.03 11:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Это потому, что у тебя MFC. Которая на уровне макросов подменяет функции.

Да, и правда не заметил что это из MFC

К>Оригинальная же функция — объявлена в

К>C:\Program Files\Windows CE Tools\wce410\STANDARDSDK_410\Include\X86\ObjBase.h
К>строка 557
Ага...
К>А библиотеки ole232.lib вообще нет.
Есть...

К>Что за ботва? Может, SDK не так собрался?

У меня не SDK, у меня PB Ну я еще нашёл что-то в class.lib и в util.lib, может оно?
Есть еще такой коммент в сорцах:
        // Free lpszCLSID
        /*LPMALLOC lpIMalloc = NULL; 
        if(CoGetMalloc(MEMCTX_TASK, &lpIMalloc) == NOERROR) 
        { 
            lpIMalloc->Free((LPVOID)lpszCLSID); 
            lpIMalloc->Release(); 
        } */
        // There's no CoGetMalloc in WCE.  Assuming it uses malloc (same as GlobalAlloc), so use free.
        free((LPVOID)lpszCLSID);


И вот последнее:

CoGetMalloc is only supported if DCOM is part of the OS. Use CoTaskMemAlloc/Free/etc.

Так что видать твой девайс без DCOM собран...
... << RSDN@Home 1.0 beta 7a | Сейчас среда, 18:05, слушаю тишину >>
"Develop with pleasure!"
Re: WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 12:36
Оценка:
Спешу порадовать сочувствовавших:

Отправил IMalloc в кемскую волость, стал юзать функции CoTaskMem{Alloc/Realloc/Free}. Они, слава богу, там есть.

Для отладочного вывода — использовал DebugOutputStringW (увы, есть только юникодная — ну и хрен с ней).
О где же вы, Frostbitten'а деянья? ( -_-; ) ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[2]: WinCE, eVC, IMalloc
От: Xentrax Россия http://www.lanovets.ru
Дата: 21.05.03 12:57
Оценка:
Кстати, еще одна ссылка для будующих поколений страждущих:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedcom/html/ceconlistingsupportedapisforcom.asp
Re: WinCE, eVC, IMalloc
От: AndrewJD США  
Дата: 21.05.03 20:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Мне потребовался IMalloc, для этого я вызываю CoGetMalloc().

К>Добавлял туда ole32.lib, oleaut32.lib, olece400.lib — ноль эффекта.

К сожалению этой функции нету . И прийдется юзать CoTaskMemAlloc. Хотя MSDN пишет что она есть в Ole232.lib, а сама эта либа есть в платформ билдере. Но как оказалось это не правда. (Я не смог ничего найти в этой либе ничено похожего. Там есть def файл и в нем она закоментарена )


К>Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).


А в чем проблема ? Юзаешь себе ATL как обычтно, но незабудь определить _DEBUG, а то они по умолчанию ставят тока DEBUG — соответственно никаких трейсов.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: WinCE, eVC, IMalloc
От: Кодт Россия  
Дата: 21.05.03 20:58
Оценка:
Здравствуйте, AndrewJD, Вы писали:

К>>Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).


AJD>А в чем проблема ? Юзаешь себе ATL как обычтно, но незабудь определить _DEBUG, а то они по умолчанию ставят тока DEBUG — соответственно никаких трейсов.


А мне нужно хитрожелтый вывод (запоминаю __FILE__, __LINE__ в одном месте, а вывожу в другом).
Вот поэтому и стал подсматривать как это сделано.

На самом деле, все оказалось просто. Там отладочный вывод только юникодный.
Ну, мне не жалко
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.