Главная страница
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.043 c
2-1157620743
fly_mer
2006-09-07 13:19
2006.09.24
Тип TRecord и его копирование...


2-1157111455
Iuda_iz_Kf
2006-09-01 15:50
2006.09.24
Управление LPT портом


1-1155283897
vamp_avp
2006-08-11 12:11
2006.09.24
Эмуляция нажатия клавиши в неактивном сонсольном приложении


9-1134713252
4ECHOK
2005-12-16 09:07
2006.09.24
[SIS и GLScene] Пропали DummyCube.


1-1155045210
Kiloper
2006-08-08 17:53
2006.09.24
Есть ли аналог компонентов MEMO или RichEdit в delphi?