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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.039 c
2-1157434617
Handle
2006-09-05 09:36
2006.09.24
Как переименовать много файлов


2-1157571270
redlord
2006-09-06 23:34
2006.09.24
моргание Timage при refresh


15-1157516076
SergP
2006-09-06 08:14
2006.09.24
О переводе имен и фамилий.


1-1155296292
KygECHuK
2006-08-11 15:38
2006.09.24
Поиск по имени компонента


15-1157044831
Вольный Стрелок
2006-08-31 21:20
2006.09.24
Как правильно?





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