Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > DLL не работает в новом компиляторе


Автор: mishapk 17.8.2012, 13:59
Всем привет!.
Имеется тестовая программа для работы с DLL библиотекой.
DLL библиотека написана на C++ Builder.
Функции библиотеки - работа с com-портом (RS-485).

Тестовая программа написана на Delphi7. Все прекрасно работает.
Этот же проект я запускаю через Embarcadero® Delphi® XE и тут начинаются проблемы. 
В общем функции работы с com- портом не как не влияют на com-port. Обмен данными не происходит.
В чем могут быть проблемы?

Выкладываю заголовки функций:
DLL
Код

extern"C" int __stdcall __declspec(dllexport)  OpenComPort(PChar NPort,int baud);
extern"C" void __stdcall __declspec(dllexport) CloseComPort();
unsigned int __fastcall Crc16(unsigned char data, char flag);
void __fastcall SendLin();
extern"C" void __stdcall __declspec(dllexport)  FormatZapr(int Adress, int funct, int subfunct, int n1, int n2, int n3);
extern"C" void __stdcall __declspec(dllexport)  ResultZapr(  int * a, int *b, PChar *c,PChar *d,PChar *e);


Delphi
Код

 procedure  CloseComPort; stdcall; external 'my.dll';
 function  OpenComPort(portname:PChar;BaudRate:integer):integer; stdcall; external 'my.dll';
 procedure  FormatZapr( Adress,  funct,  subfunct,  n1,  n2, n3:integer); stdcall; external 'my.dll';
 procedure ResultZapr( var a:integer; var b:integer; var c:PChar; var d:PChar ; var e:PChar); stdcall; external 'my.dll';
////////////////////////////////////////////////////////////////////////////////////////////////////
OpenComPort(PChar('com1'),19200);
procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
      c,d,e:Pchar;
      a,b:integer;
      s:string;
begin

   Memo1.Clear; s:='';
    for i:=1 to 4 do
    begin
     FormatZapr(1,68,4,adr[i],1,0);
    ResultZapr(a,b,c,d,e);
    sleep(10);
    if  adr[i]=1 then begin
    s:=s+IntToStr(adr[i])+':'+sdr[i]+':'+ReadRI(AnsiString(c)) +':'+result(b);
     end
   else

..................................................................



Может есть не совместимые типы данных?

Автор: northener 17.8.2012, 14:02
Цитата(mishapk @  17.8.2012,  13:59 Найти цитируемый пост)
Может есть не совместимые типы данных? 

PChar в Д7 и PChar в ХЕ это две большие разницы.

Автор: mishapk 17.8.2012, 14:15
Как исправить?

Автор: northener 17.8.2012, 14:17
Цитата(mishapk @  17.8.2012,  14:15 Найти цитируемый пост)
Как исправить? 

Например использовать PAnsiChar вместо PChar.

Автор: Frees 17.8.2012, 14:27
Статья где то есть по переходу на юникодную версию делфи, там целый список что надо проверить и что перестанет работать.

Автор: mishapk 17.8.2012, 14:39
Ясно. Не подключался COM порт. Так как при его открытии ему приходило не "COM1" а только первая буква "C".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)