Главная страница
    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.042 c
15-1188080478
Альберт_
2007-08-26 02:21
2007.09.30
кто-нибудь продавал плоды своего Творчества?


2-1188886212
Bast
2007-09-04 10:10
2007.09.30
Проблема


4-1175501821
Рамиль
2007-04-02 12:17
2007.09.30
Привелегии бэкапа


2-1188565851
writebuf(nil);
2007-08-31 17:10
2007.09.30
Проверить ASCII строку


2-1188559248
Mr.Vlad
2007-08-31 15:20
2007.09.30
String and Single





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