Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Вниз

Опять по поводу библиотеки типов   Найти похожие ветки 

 
alxx   (2002-04-28 21:14) [0]

Я стал перелопачивать mstask.idl в ручную и вот, например, не
получается такая штука.

такую функцию:

HRESULT NewWorkItem(
[in] LPCWSTR pwszTaskName,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] IUnknown ** ppUnk);

Я описал в DELPHI так:

Function NewWorkItem(pwszTaskName:PWideChar; rclsid:TGUID; riid:TGuid; out ppUnk: IUnknown):HRESULT; safecall;

(мне Type Library Editor помог) И вызываю ее так:

Var Task:ITask;
wss :PWideChar;

...

hr := TaskSched.NewWorkItem(Addr(wss),
CLSID_CTask,
IID_ITask,
IUnknown(Task));

И, БЛИН, Аксцесс виолейшн егогог! получается, когда я его вызываю!!
Причем, перепробовал посылать туда всякие указатели и указатели на указатели. В чем же я не прав? Я этого IDL совсем не знаю...


 
Vovchik   (2002-04-28 22:32) [1]

Ну, во первых, ты читал чего написано в SDK:

ITaskScheduler::NewWorkItem
[This is preliminary documentation and subject to change.]

The NewWorkItem method allocates space for a new task and retrieves its address. Unlike ITaskScheduler::AddWorkItem, this function handles memory allocation automatically.

HRESULT NewWorkItem(
LPCWSTR pwszTaskName,
REFCLSID rclsid,
REFIID riid,
IUnknown **ppunk
);
Parameters
pwszTaskName
LPCWSTR that specifies the new task"s name. The task name must conform to Windows NT/Windows 2000 file-naming conventions but cannot include backslashes, because nesting within the task folder object is not allowed.
rclsid
Identifier of the class of work item to be created. The only supported class is CLSID_Ctask.
riid
Reference identifier of the interface being requested.
ppunk
Address of an interface pointer that receives the requested interface.
Return Values
Returns one of the following values.

Value Description
S_OK The operation was successful.
ERROR_
FILE_EXISTS A task with the specified name already exists.
E_INVALIDARG One or more of the arguments are not valid.
E_OUTOFMEMORY Not enough memory is available to complete the operation.

See Also
AddWorkItem


Кроме того, почему у тебя safecall, а не stdcall?
И ты заменил REFCLSID и REFIID на TGUID, а может они разные?

И ещё,

IUnknown ** ppUnk

это наверное указатель на указатель?


 
alxx   (2002-04-28 22:40) [2]

Спасибо.
Я извиняюсь, но я просто в COM новичок. И не совсем понимаю, что такое REFCLSID. А указатель на указатель там врядли. А вот stdcall - это действительно надо сделать. Хотя я тоже не знаю почему, просто я в другом месте такое видел.

А вообще-то я уже нашел все на испанском:

http://www.orionis.com.mx/tallerdelphi/td06_4.htm



 
Vovchik   (2002-04-28 22:52) [3]

На испанском - это круто. Но ты мог бы начать с раскопок исходников в C++ Builder. Там есть все описания, заведомо верные. И можешь попробовать прогу написать в С++. Когда она будет работать, то можно переносить в дельфи.


 
Cobalt   (2002-04-28 22:53) [4]

А если вместо Safecall - StdCall?


 
alxx   (2002-04-28 23:15) [5]

Я же содрал из MSDN примеры. Прогнал их в Visual C++, все работало. И как раз не смог перенести на Delphi. Все-таки у микрософт такая куча всяких непонятных типов и всяких там указателей на указатели. Непривычно. А испанец - молодец - вроде бы уже заработало.




Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-39799
Sniffer
2002-04-28 18:12
2002.05.13
Cимплексный метод


1-39746
Zuker
2002-04-27 21:25
2002.05.13
Определитель


14-39827
SPeller
2002-04-03 15:43
2002.05.13
К авторам сайта


4-39918
chernoruk
2002-03-09 05:58
2002.05.13
Убить диалоговое окно!


1-39803
maks
2002-04-27 16:47
2002.05.13
[D6] Кто-нибудь ставил LMD-Tools помогите советом.....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский