Форум: "Основная";
Текущий архив: 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.004 c