1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

проблемы с вызовом Dll- функции скомпилированной в делфи.

Тема в разделе "С и С++", создана пользователем eclipsevl, 10 окт 2007.

Статус темы:
Закрыта.
  1. eclipsevl

    eclipsevl Гость

    Репутация:
    0
    вобщем проблема вот в чем:

    в длл(исходник на делфи у меня есть) есть функция DoGetRS232Buffer

    Код:
    function DoGetRS232Buffer(var RS232Buffer:array of byte; var RS232BufferLength:integer):integer; stdcall export;
    //;get received bytes from FIFO RS232 buffer
    var
    BufferLength,i:integer;
    RS232BufferWriteLocal:integer;
    P:^integer;
    begin
    BufferLength:=0;
    Result:=NO_ERROR;
    if RS232BufferLength>0 then
    for i:=1 to RS232BufferLength do
    begin
    P:=@PGlobalRS232Buffer^[GlobalRS232BufferWritePos];
    RS232BufferWriteLocal:=P^;
    if (RS232BufferRead=RS232BufferWriteLocal) then
    Break;
    RS232Buffer[BufferLength]:=PGlobalRS232Buffer^[RS232BufferRead];
    inc(BufferLength);
    RS232BufferRead:=(RS232BufferRead+1) mod (GlobalRS232BufferEnd+1);
    end;
    RS232BufferLength:=BufferLength;
    end;
    как я понял, для ее вызова нужен массив типа byte(возвращаемый этой функцией) и размер массива типа int. при написании программы на c++ я заменил byte на char. вот код вызова функции

    Код:
    	typedef int(WINAPI *DoGetRS232Buffer)(char *,int);
    DoGetRS232Buffer	GetBuff;
    hUSBdll=LoadLibrary(DllName)
    GetBuff=(DoGetRS232Buffer)::GetProcAddress(hUSBdll,"DoGetRS232Buffer")
    затем вызываю ее

    Код:
    	char ch[90];
    a = sizeof(ch);
    GetBuff(ch,a);

    но функция ничего не возвращает и после закрытия программы появляется окно ошибки.
    может я что-то сделал не так ?
    P.S. остальные функции этой dll работают просто отлично.
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    босью что косяк в том, что одним из входным парметров является динамический массив, который явялется более сложной структорой данных чем просто указатель, хотя я могу ошибаться
     
  3. eclipsevl

    eclipsevl Гость

    Репутация:
    0
    к сожалению, это так. а есть ли какойто выход из этого положения ? на делфи народ как-то делает такую вещь...
     
  4. zubr

    zubr Гость

    Репутация:
    0
    Попробуй GetBuff(&ch[0], a);
     
  5. eclipsevl

    eclipsevl Гость

    Репутация:
    0
    пробывал...

    если массив не динамический
    Код:
    char ch[10];
    толку от функции нет, а прога после закрытия выдает ошибку...

    если динамический
    Код:
    char *ch;
    то прямо после запуска ошибка...
     
  6. zubr

    zubr Гость

    Репутация:
    0
    Я как то делал такую штуку, только наоборот - из проги на Delphi передавал данные в Dll на VS C++. Так вот данные из Delphi передавались в виде динамического массива - все корректно работало. Надо будет поковыряться в архивах.
     
Загрузка...
Похожие Темы - проблемы вызовом Dll
  1. CHEATER
    Ответов:
    1
    Просмотров:
    85
  2. Define

    Проблема Проблемы с шеллом

    Define, 18 июн 2017, в разделе: Kali Linux
    Ответов:
    2
    Просмотров:
    202
  3. Oksy
    Ответов:
    37
    Просмотров:
    1.795
  4. nikos
    Ответов:
    31
    Просмотров:
    1.378
  5. lmike
    Ответов:
    18
    Просмотров:
    807
Статус темы:
Закрыта.

Поделиться этой страницей