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

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

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

    eclipsevl Гость

    вобщем проблема вот в чем:

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

    Код (Text):
    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. вот код вызова функции

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

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

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

    Kmet Well-Known Member
    Java Team

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

    eclipsevl Гость

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

    zubr Гость

    Попробуй GetBuff(&ch[0], a);
     
  5. eclipsevl

    eclipsevl Гость

    пробывал...

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

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

    zubr Гость

    Я как то делал такую штуку, только наоборот - из проги на Delphi передавал данные в Dll на VS C++. Так вот данные из Delphi передавались в виде динамического массива - все корректно работало. Надо будет поковыряться в архивах.
     
Загрузка...
Похожие Темы - проблемы вызовом Dll
  1. aliaksandr89
    Ответов:
    3
    Просмотров:
    152
  2. Amfion
    Ответов:
    5
    Просмотров:
    147
  3. wowa
    Ответов:
    7
    Просмотров:
    404
  4. John_Tavarez
    Ответов:
    0
    Просмотров:
    344
  5. Валентин Амбер
    Ответов:
    11
    Просмотров:
    372
Статус темы:
Закрыта.

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