Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Почему при создании OLE в DLL вызывается ошибка?   Найти похожие ветки 

 
_Ruslan_ ©   (2006-01-15 12:00) [0]

Добрый день! Скажите пожалуйста почему при создании OLE в DLL вызывается ошибка?

Следующий код в виде EXE работает а в виде DLL вызывает ошибку

//DLL---------------

Uses ComObj;

-------

function ShowSelUserForm(hWindow:HWND;InputStr:PChar): PChar;stdcall;
var
 FR:OleVariant;
 //i:1..30;
begin
 try
   FR := CreateOleObject("AddIn.DrvFR");//или FR := CreateOleObject("Excel.Application’);
 except
   ShowMessage("Ошибка!!!");
   Exception.Create("Error");
 end;

 ---------
 ---------
 ---------

 FR:=0;
end;

Вызываю следующим образом:

function ShowSelUserForm(hWindow:HWND;InputStr:PChar): PChar;stdcall; external "ShtrihKombo.dll";

-----

ShowSelUserForm(Handle,PChar("123"));


 
Набережных С. ©   (2006-01-15 13:38) [1]

CoInitialize


 
isasa ©   (2006-01-16 11:47) [2]

Для DLL логичнее
CoInitializeEx( nil, COINIT_MULTITHREADED);


 
Набережных С. ©   (2006-01-16 12:44) [3]


> isasa ©   (16.01.06 11:47) [2]


> Для DLL логичнее
> CoInitializeEx( nil, COINIT_MULTITHREADED);

Чем именно логичнее? Обоснуй пожалуйста - именно то, что сказал. Потому как на мой взгляд эта фраза вообще не несет никакой смысловой нагрузки.


 
isasa ©   (2006-01-16 15:34) [4]

DLL по умолчанию MTA, поэтому логичнее
CoInitializeEx( nil, COINIT_APARTMENTTHREADED|COINIT_MULTITHREADED ) - CoUninitialize.

Ну а если вызывать из ShowSelUserForm(...), то без разницы.


 
Набережных С. ©   (2006-01-16 16:20) [5]


> isasa ©   (16.01.06 15:34) [4]


> DLL по умолчанию MTA, поэтому логичнее

Опять ничего не понял:( Слова все знакомые, а вместе - бессмыслица какая-то:( С чего вдруг "DLL по умолчанию MTA"? Какая вообще здесь может быть связь? Вы вообще-то понимаете смысл вызова этой функции и используемых в ней флагов? Похоже нет:((

В общем, чтобы не затягивать:

Тип используемого апартамента никоим образом не зависит от типа испoлняемого модуля, а определяется совсем иными вещами. Это раз.

Производить инициацию в DLL вообще не следует, это должен делать хост - кроме тех случаев, когда поток создается в DLL. Это два.

В [1] я вообще не имел в виду какой-либо конкретной функции, а всего лишь высказал предположение, что проблемы связаны с неинициализированностью подсистемы COM. Предложение - потому, что автор не додумался до такой "сложной" мысли, как необходимость конкретизировать ошибку, а не глушить ее. Это три.



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

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
15-1188493388
mail.ru
2007-08-30 21:03
2007.09.30
где достать компонент для работы с маил.ру агентом?


15-1188684253
Marser
2007-09-02 02:04
2007.09.30
Владельцам ноутбуков. Кто какой использует?


2-1188755002
KJ13
2007-09-02 21:43
2007.09.30
Убрать программу из списка Ctrl+Alt+Delete


15-1188570006
Черный Шаман
2007-08-31 18:20
2007.09.30
Русский код, бессмысленный и беспощадный.


6-1170156869
maxistent
2007-01-30 14:34
2007.09.30
закачка/докачка по ftp/http