Форум: "Прочее";
Текущий архив: 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