Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Вниз

работа в BASIC с объектом из DELPHI DLL   Найти похожие ветки 

 
jurez   (2008-07-20 13:10) [0]

есть простая дллка
library wordinst;
uses
 SysUtils,
 activex,
 comobj,
 Classes;

function getword:idispatch; stdcall;
begin
 CoInitialize(nil);
 result:=CreateOleObject("word.application");
end;
 exports getword;
begin

end.

когда вызываю ее из Дельфи же - все нормально
function getw:idispatch; external "wordinst.dll" name "getword";
.
.
.
var  f:variant;

begin
 f:=getw;
 f.visible:=true;
 f.documents.add;

end;

проблемы начинаются когда вызываю ее из BASIC

Declare Function getword Lib "c:\tmp\wordinst.dll" ()

sub mysub
 getword
end sub

в этом случае все нормально - бейсик берет функцию и обрабатывает (процесс ворда появляется)

НО необходимо управлять полученным объектом

Declare Function getword Lib "c:\tmp\wordinst.dll" () as object

sub mysub
 getword.visible=true
end sub

приводит к полному вылетанию бейсика!.

кто-нибудь с подобным сталкивался?


 
tesseract ©   (2008-07-20 17:27) [1]

Ты фигнеё маешься какой-то, почему из бэйсика сразу COM-сервер не вызывать ? Тем более getword вынуждает каждый раз Com-сервер передёргивать. И кстати не CoInitialize а CoInitializeEx и вызова Countinitialize я в либе не вижу. А ты её в GetWord должен указать, ибо функция в Dll должна за собой всё убрать после вызова.


 
Плохиш ©   (2008-07-20 23:06) [2]

К [1] можно добавить только, что описание

> приводит к полному вылетанию бейсика!.

ну пряму супер информативно.


 
palva ©   (2008-07-21 10:12) [3]

getword возвращает тип object?
А у этого типа есть свойство visible?
Может быть нужно какое-то приведение типов?


 
jurez   (2008-07-21 10:48) [4]

tesseract: coinitialize в модуле activex- смотри внимательнее. "вынужден передергивать"... и что??? в программе вызывается один раз метод.
"вызова Countinitialize я в либе не вижу. А ты её в GetWord должен указать"
повторю код еще раз...
function getword:idispatch; stdcall;
begin
CoInitialize(nil);
result:=CreateOleObject("word.application");
end;

Плохиш: а что еще можно информативно добавить к тому что бейсик просто закрывается???!

palva: на самом деле уже как только не изворащался... передавал и Idispatch и к variant приводил - в дельфе работает, а в бейсике нет. походу в бейсике дллку придется делать


 
Сергей М. ©   (2008-07-21 11:30) [5]


> в бейсике дллку придется делать


Зачем она нужна вообще ?
Что мешает работать с СОМ-сервером непосредственно в BASIC-коде ?


 
palva ©   (2008-07-21 11:39) [6]

Из делфи в бейсик можно возвращать те типы, которые с которыми может работать тот и другой язык. IDispatch в бейсике нет. object тоже непонятный для VB6 тип - там есть Variant. Типы Variant в бейсике и делфи вполне возможно, что работают по-разному. Короче говоря dll, должна сконструировать и передать в бейсик правильный тип. Для этого нужно четко знать, чего вы хотите.


 
palva ©   (2008-07-21 11:41) [7]


> в бейсике дллку придется делать

Вы о каком бейсике говорите? В бейсике обычную dll сделать невозможно. Только com, ну или net, если у вас Basic .Net


 
Сергей М. ©   (2008-07-21 12:11) [8]


> Типы Variant в бейсике и делфи вполне возможно, что работают
> по-разному


Именно так и есть.


> jurez


Справку читать надо, там черным по белому написано:

The OleVariant type exists on both the Windows and Linux platforms. The main difference between Variant and OleVariant is that Variant can contain data types that only the current application knows what to do with. OleVariant can only contain the data types defined as compatible with OLE Automation which means that the data types that can be passed between programs or across the network without worrying about whether the other end will know how to handle the data.


 
jurez   (2008-07-21 12:37) [9]

Сергей М.
это я все читал. olevariant не прокатывает тоже..
"Что мешает работать с СОМ-сервером непосредственно в BASIC-коде"  - уже второй человек почемуто задается этим вопросом. я на мазохист чтобы специально так извращаться- прятать созхдание ворда в другом месте. :)
нужно чтобы ворд создавался только при определенной платформе, и нужно чтобы это было скрыто в основной бейсиковской программе - для этого забор и городится.

palva Речь ведется про VB6  - там можно сделать activeX-dll

по существу так пока никто и не написал


 
Сергей М. ©   (2008-07-21 12:51) [10]


> по существу так пока никто и не написал
>


А "по существу" - работа с OLE/COM-объектами в дан.случае требует либо явное использование библиотеки типов (см. меню References VB-среды) либо использование safecall- вместо stdcall-соглашения. Ни того ни другого ты не сделал.


 
palva ©   (2008-07-21 13:43) [11]


> по существу так пока никто и не написал

Ну значит ваш вопрос никому не интересен или непонятен.
Мне например непонятно, что такое тип object в бейсике (в шестом) и откуда у этого типа свойство visible. Если вы не хотите вступать в дискуссию на эту тему, а ждете готовый код, то продолжайте ждать. Может и появится знаток.


 
jurez   (2008-07-21 16:58) [12]

про safecall тоже читал ипробовал...  References здесь никаким разом не нужны.

"откуда у этого типа свойство visible"  - опять же если посмотреть приведенный пример - то видно что усиленно пытаются "экспортить" ворд - у ворда это свойство отвечает за отображение программы..

мой вопрос в конце первого поста звучал довольно ясно- "кто-нибудь с подобным сталкивался?"

пробоему решил  - работает в библиотеке как olevariant;stdcall (эту комбинацию видать пропустил) и в бейсике
declare function myfunc...... as variant

dim obj as object
set obj= myfunc

тема закрыта


 
Сергей М. ©   (2008-07-21 17:18) [13]


> References здесь никаким разом не нужны


Да ты что ?! А мужики-то и не знают)
Ты еще скажи, что ничего не знаешь про early binding)


 
tesseract ©   (2008-07-21 20:35) [14]


> тема закрыта


Жалко, что дикая утечка памяти нет. И потом опять заявляют, что MS глючные программы ваяет.


 
jurez   (2008-07-22 23:46) [15]

не удержался..

Сергей М. ты  еще расскажи про позднее связывание...
сарказмом  своим свети в другом месте. если это(references) у тебя панацея, то могу только поздравить.

tesseract
понял что написал то?


 
Германн ©   (2008-07-23 02:42) [16]


> jurez   (22.07.08 23:46) [15]
>
> не удержался..
>

А здря.
Неудержание очень плохая и малолечимая штука. :)

И кстати. Тему могут закрыть, согласно правилам, только модераторы и администратор.


 
jurez   (2008-07-23 09:31) [17]

да поскорее бы прибили



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

Форум: "Основная";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
15-1248778053
aeore
2009-07-28 14:47
2009.09.27
GIS в Delphi


1-1217416338
hawkins
2008-07-30 15:12
2009.09.27
Настройка окна Structure в среде Delphi2007


2-1248344261
tomkat
2009-07-23 14:17
2009.09.27
чтение DBF побайтно


15-1248356404
Unknown user
2009-07-23 17:40
2009.09.27
Текстуры с альфа-каналом


2-1248171481
MAX
2009-07-21 14:18
2009.09.27
таблицы Word





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