Форум: "Corba";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
ВнизПочему при создании 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 вся ветка
Форум: "Corba";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c