Реализует оболочку над m$ agent.
Я столкнулся с тем, что, при её использовании, у меня вылетает SEGFAULT в Lazarus.
Затем, обнаружил, что не работает следующая функция:
- Код: Выделить всё
//---------------------------------------------------------------------------
function InitChar(): pointer; stdcall;
begin
Result := nil;
if (CoInitialize(nil) <> S_OK) then exit;
MessageBox(0, 'InitChar', '', MB_OK);
// if (OLEInitialize(nil) <> S_OK) then exit;
Result := TAgent.Create(nil);
end;
//---------------------------------------------------------------------------
procedure InitDLL(); stdcall;
begin
if (MSAgents = nil) then MSAgents := InitChar();
end;
//---------------------------------------------------------------------------
Сообщение не выводится. Очевидно, что не выполняется CoInitialize.
В программе, написанной для проверки этой DLL, на Delphi, всё работает.
В чём проблема? И как её решить?
Добавлено спустя 1 минуту 30 секунд:
Тестовая программка для Delphi примитивна и ничего "лишнего", собственно, не делает:
- Код: Выделить всё
program test_agent_dll;
{$APPTYPE CONSOLE}
uses
SysUtils, dll_exports, dialogs;
var s: shortstring;
p: pointer;
dlgAgentOpen: TOpenDialog;
begin
s := 'good';
dlgAgentOpen := TOpenDialog.Create(nil);
if (dlgAgentOpen.Execute) then
begin
LoadChar(PChar(dlgAgentOpen.FileName));
Visibility(true, false);
Speak(PChar(integer(@s) + sizeof(char)));
end;
readln;
end.