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

Вниз

DLL не работает :(   Найти похожие ветки 

 
Тыгыдым   (2006-09-04 09:12) [0]

Создал DLL-ку для работы с Word через OLE... Открыть Ворд, написать слово, найти и заменить слово, сохранить в файл...
Если импортирую эту ДЛЛ в Делфи все прекрасно работает... Если импортирую в С++ Билдер, то не хотят слова искаться...

Текст функции поиска:
function FindTextDoc(text: string): boolean;
begin
try
W.Selection.Find.Forward:=true;
W.Selection.Find.Text:=text_;
FindTextDoc := W.Selection.Find.Execute;
except
FindTextDoc:=false;
end;
End;

где
W:=CreateOleObject("Word.Application");

Эта функция из Билдера усиленно возвращает FALSE!

Кто скажет почему?


 
Сергей М. ©   (2006-09-04 09:21) [1]

Не соблюдены соглашения о вызовах.


 
Alx2 ©   (2006-09-04 09:25) [2]

и string лучше на что-то более интернациональное изменить.


 
Тыгыдым   (2006-09-04 09:30) [3]

2 Alx2: изменено. используется PChar и соответственно StrPas()... просто не совсем тот код вставил...
2 Сергей М.: Текст Билдера

typedef __fastcall int (*CharFunc) (PChar);

CharFunc FindTextDoc;

HANDLE h = LoadLibrary("word.dll");
if (!h) return;
FindTextDoc = (CharFunc)GetProcAddress(h, "FindTextDoc");

FindAndPasteTextDoc("ОК", "CANCEL"); // возвращает FALSE


 
Тыгыдым   (2006-09-04 09:31) [4]

Не та функция :)

FindAndPasteTextDoc("ОК"); // возвращает FALSE


 
Сергей М. ©   (2006-09-04 09:37) [5]

function FindTextDoc(text: PChar): boolean; stdcall;


 
Тыгыдым   (2006-09-04 09:46) [6]

Пока не могу попробовать... А почему из Делфей все нормально идет?


 
Сергей М. ©   (2006-09-04 09:48) [7]


> почему из Делфей все нормально идет?


Потому что соглашение о вызове соблюдено.


 
Тыгыдым   (2006-09-04 09:50) [8]

ок. пасиб. буду пробовать


 
Тыгыдым   (2006-09-04 13:26) [9]

Все равно не работает... Да иногда еще и Access Violation выскакиывает...
А в Билдере как указать что функция stdcall?


 
Сергей М. ©   (2006-09-04 14:29) [10]


> Тыгыдым   (04.09.06 13:26) [9]


Тогда переквалифицируйся в управдомы.

Или приводи уже для анализа все подробности твоего кода, как делфи так и СВВ

А во, вишь ли, "та функция", "не та функция".. Сам черт не разберет, что за бардак у тебя там творится)


 
Сергей М. ©   (2006-09-04 14:30) [11]

СВВ = ВСВ


 
Бугага ©   (2006-09-04 15:41) [12]

library word;

uses
 Classes, ComObj, Windows, Sysutils;

{$R *.res}

var
 W: Variant;

function CreateWord: boolean; stdcall;
begin
 CreateWord:=true;
 try
   W:=CreateOleObject("Word.Application");
 except
   CreateWord:=false;
 end;
end;

function VisibleWord(Visible: boolean): boolean; stdcall;
begin
 VisibleWord:=true;
 try
   W.visible:=Visible;
 except
   VisibleWord:=false;
 end;
end;

function FindTextDoc(text_: PChar): boolean; stdcall;
begin
 try
   W.Selection.Find.Forward:=true;
   W.Selection.Find.Text:=StrPas(text_);
   FindTextDoc:=W.Selection.Find.Execute;
 except
   FindTextDoc:=false;
 end;
end;

exports CreateWord;
exports VisibleWord;
exports FindTextDoc;

begin
end.


 
Бугага ©   (2006-09-04 15:44) [13]

typedef __fastcall int (*CharFunc) (PChar);
typedef __fastcall int (*IntFunc) (int);
typedef __fastcall int (*VoidFunc) (void);

VoidFunc CreateWord;
CharFunc FindTextDoc;
IntFunc VisibleWord;

HANDLE h = LoadLibrary("word.dll");
if (!h) return;
CreateWord = (VoidFunc)GetProcAddress(h, "CreateWord");
FindTextDoc = (CharFunc)GetProcAddress(h, "FindTextDoc");
VisibleWord = (IntFunc)GetProcAddress(h, "VisibleWord");

if (!CreateWord) return 1;
if (!VisibleWord(1)) return 2;
if (!FindTextDoc("1")) return 3;


 
isasa ©   (2006-09-04 15:46) [14]

typedef __fastcall int (*CharFunc) (PChar);
->
typedef __stdcall int (*CharFunc) (PChar);
...


 
Тыгыдым   (2006-09-04 15:46) [15]

почему имя не мое?


 
Сергей М. ©   (2006-09-04 15:49) [16]


> почему


По кочану.

Тебя суть происходящего волнует или что ?)


 
Тыгыдым   (2006-09-04 15:50) [17]

посмотрел дату вашего рождения и глазам не поверил...


 
isasa ©   (2006-09-04 16:00) [18]

Ты еще мою посмотри.



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

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

Наверх




Память: 0.5 MB
Время: 0.044 c
15-1157100888
Dbn
2006-09-01 12:54
2006.09.24
С праздником, друзья!


15-1157049780
Chort
2006-08-31 22:43
2006.09.24
сабж


3-1153404215
Pazitron_Brain
2006-07-20 18:03
2006.09.24
Два вопроса по удаленной бд


2-1157531452
P
2006-09-06 12:30
2006.09.24
Как вызвать HasOverlappedIoCompleted из дельфи


15-1157366439
ddddd
2006-09-04 14:40
2006.09.24
Как в ссылке прописать место в странице?