Тема: Динамическое подключение dll к arx

Есть dll "mydll.dll", написанная в DELPHI, в ней определена функция my_summ (string).
Как динамически подгрузить в arx эту библиотеку и использовать эту функцию.
Пробовал:

HMODULE mylib;
mylib = LoadLibrary("mydll.dll");
void (*pmy_summ)(CString);
FARPROC &)pmy_summ=GetProcAddress(mylib,"my_summ");
pmy_summ("4");
FreeLibrary(mylib);

акад выдает ошибку.
Заранее спасибо.

Re: Динамическое подключение dll к arx

int (FAR PASCAL *lpfnmy_summ) (char * str);
// Загрузка библиотеки mydll.dll
char pathlib[MAX_PATH];
HINSTANSE hinstanc;
if (ads_findfile("mydll.dll", pathlib) != RTNORM)
       strcpy(pathlib, "mydll.dll");
       hinstanc = LoadLibrary(pathlib);
      if ((int)hinstanc > HINSTANCE_ERROR) {
    (FARPROC&)lpfnmy_summ =    GetProcAddress(hinstanc, "my_summ ");
    if (lpfnmy_summ  == NULL) {
             MessageBox("Ошибка получения адреса библиотеки", NULL,        MB_ICONERROR);
          FreeLibrary(hinstanc);
         return FALSE;
    }
      } else {
    MessageBox("Не могу загрузить библиотеку mudll.DLL", NULL,
            MB_ICONERROR);
    return FALSE;
      }

Re: Динамическое подключение dll к arx

Написал такой код, библиотека грузится, функция вызывается, но параметр функции не передается. Где ошибка?

void alx_dll()
{
    char *var1 = "5";
    int (FAR PASCAL *lpfnmy_summ) (char * str), var2;
    HINSTANCE hinstanc;
    hinstanc = LoadLibrary("Y://mydll.dll");
    if ((int)hinstanc > HINSTANCE_ERROR)
    {
        (FARPROC&)lpfnmy_summ = GetProcAddress(hinstanc, "my_summ");
        if (lpfnmy_summ  == NULL)
        {
            FreeLibrary(hinstanc);
            return;
        }
    }
    else
    {
        return;
    }
    var2 = lpfnmy_summ(var1);
    acutPrintf ("%d", var2);
    FreeLibrary(hinstanc);
}

Re: Динамическое подключение dll к arx

А с функцией в библиотеке все нормально? Может быть ошибка в ней?

Re: Динамическое подключение dll к arx

Функция из Delphi вызывается нормально. Вот ее код:

library mydll;
uses
  SysUtils,
  Classes,dialogs;
function my_summ(x:string):integer;export;
var
y,x1:integer;
begin
x1:=strtoint(x);
result:=(x1)+5;
end;
exports my_summ  index 10;
{$R *.res}
begin
end.

Re: Динамическое подключение dll к arx

Проблему решил. Если кому интересно:

int (FAR PASCAL *lpfnmy_summ) (char*);
    char var1[] = "5";
    int var2;
    
    HINSTANCE hinstanc;
    hinstanc = LoadLibrary("C://strdll.dll");
    if ((int)hinstanc > HINSTANCE_ERROR)
    {
        (FARPROC&)lpfnmy_summ = GetProcAddress(hinstanc, "my_summ");
        if (lpfnmy_summ == NULL)
        {
            FreeLibrary(hinstanc);
            return ;
        }
    }
    else
    {
        return;
    }
    
    var2 = lpfnmy_summ(var1);
    acutPrintf ("%d", var2);
    FreeLibrary(hinstanc);

а вот библиотека на DELPHI

library strdll;
uses
  SysUtils,
  Classes;
function my_summ(x:string):integer;export;stdcall;
var
x1:integer;
begin
x1:=strtoint(x);
result:=x1+5;
end;
exports my_summ  index 10;
{$R *.res}
end.