Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.045 c
15-1188994278
Layner
2007-09-05 16:11
2007.09.30
Ряд 17,19,х,20,15, что подставить вместо x?


15-1188536993
boriskb
2007-08-31 09:09
2007.09.30
почему все же гудят высоковольтные провода и многое другое


2-1188813839
Lyberzon
2007-09-03 14:03
2007.09.30
Как загрузить из INI список секций в ComboBox?


15-1188747945
TStas
2007-09-02 19:45
2007.09.30
Где скачать дистрибутив php?


15-1188303996
data
2007-08-28 16:26
2007.09.30
собираемся покупать мебель для кухни, кто покупал недавно?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский