Мне потребовался 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
К>Мне потребовался 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);
}
Здравствуйте, Кодт, Вы писали:
К>Мне потребовался IMalloc, для этого я вызываю CoGetMalloc(). К>Не линкует.
Я, коненчо, могу ошибаться, но похоже CoTaskMemAlloc/Free/Realloc — это все, что у нас есть.
К>(хотя такой же колдун для VC6 рожает там здоровенный список — на всякий случай, наверно).
WCE отличается от обычных Win
К>Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).
Здравствуйте, Кодт, Вы писали:
К>Добавлял туда 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.
Таким образом, ты где-то .h не тот подключил, ибо функции такой нет. Ибо в таблицу пихаются затычки, который подгружают нужные функции по мере необходимости и всё идёт через указатели на функции...
Здравствуйте, 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)
Здравствуйте, orangy, Вы писали:
O>Вобщем, как это выглядит изнутри:
<>
O>Таким образом, ты где-то .h не тот подключил, ибо функции такой нет. Ибо в таблицу пихаются затычки, который подгружают нужные функции по мере необходимости и всё идёт через указатели на функции...
Это потому, что у тебя MFC. Которая на уровне макросов подменяет функции.
Оригинальная же функция — объявлена в
C:\Program Files\Windows CE Tools\wce410\STANDARDSDK_410\Include\X86\ObjBase.h
строка 557
Здравствуйте, Кодт, Вы писали:
К>Это потому, что у тебя 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.
Здравствуйте, Кодт, Вы писали:
К>Мне потребовался 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."
Здравствуйте, AndrewJD, Вы писали:
К>>Заодно — какую библиотеку подключить, чтобы сделать отладочный вывод (ATLTRACE и прочая).
AJD>А в чем проблема ? Юзаешь себе ATL как обычтно, но незабудь определить _DEBUG, а то они по умолчанию ставят тока DEBUG — соответственно никаких трейсов.
А мне нужно хитрожелтый вывод (запоминаю __FILE__, __LINE__ в одном месте, а вывожу в другом).
Вот поэтому и стал подсматривать как это сделано.
На самом деле, все оказалось просто. Там отладочный вывод только юникодный.
Ну, мне не жалко