Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2014, 12:34   #1
valdi
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 5
По умолчанию Помогите найти ошибку в DLL

Здравствуйте,
есть работающая библиотека на C#, надо переписать ее на Delphi,с D я не знаком и поэтому не уверен в правильности того что пишу
Просьба посмотреть где ошибка(при компиляции библиотеки ошибки не выдается,но она не работает)
Код на шарпе:
Код:
public class Class1
    {
       private const string m_strPath = "CP5200.dll";
 
       //RS232/485
       [DllImport(m_strPath, CharSet = CharSet.Auto)]
       public static extern int CP5200_RS232_InitEx(IntPtr fName, int nBaudrate, int dwTimeout);
       [DllImport(m_strPath, CharSet = CharSet.Auto)]
       public static extern int CP5200_RS232_SendText(int nCardID, int nWndNo, IntPtr pText, int crColor, int nFontSize, int nSpeed, int nEffect, int nStayTime, int nAlignment);
       public int z(string s, int port, int font)
       {        
          int m_nTimeout = 600;
          port = Convert.ToByte(5);
          int nBaudrate = 115200;
          CP5200_RS232_InitEx(Marshal.StringToHGlobalAnsi("COM" + port.ToString()), nBaudrate, m_nTimeout);
          return CP5200_RS232_SendText(Convert.ToByte(1), 0, Marshal.StringToHGlobalAnsi(s), 0xFF, 16, 3, 0, 3, 5); ;
       }
    }
Код на Delphi:
Код:
library Stella;
 
uses
  SysUtils,
  Classes,                
  Windows;
 
function CP5200_RS232_InitEx(fName:AnsiString; nBaund:Integer; nTimeout:Integer):Integer; stdcall; forward; external 'CP5200.dll';
function CP5200_RS232_SendText(nCardID:Integer;nWndNo:Integer;pText:PChar;crColor: DWord;nFontSize:Integer;nSpeed:Integer;nEffect:Integer;nStayTime:Integer;nAlignment:Integer):Integer; stdcall; forward; external 'CP5200.dll';
  {$R *.res}
function SendString(s:PAnsiChar;port_:integer;font_:integer): Integer; stdcall;
begin                                        
  CP5200_RS232_InitEx('COM5', 115200, 600);
  Result := CP5200_RS232_SendText(1, 0, s, RGB(0,255,0), 16, 3, 0, 3, 5)
end;
exports
    SendString;
begin
 
end.
valdi вне форума Ответить с цитированием
Старый 15.08.2014, 12:35   #2
valdi
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 5
По умолчанию

Может делфи не видит библиотеку сp5200?
Помогите понять в чем проблема
valdi вне форума Ответить с цитированием
Старый 15.08.2014, 12:42   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Будет стоить примерно около 10 000 целковых. Найдёте дешевле, - скажите.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 15.08.2014, 12:49   #4
valdi
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 5
По умолчанию

шутканули)
valdi вне форума Ответить с цитированием
Старый 15.08.2014, 13:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
IntPtr fName
и
Цитата:
fName:AnsiString;
IntPtr - это что за тип?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.08.2014, 13:17   #6
valdi
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
и

IntPtr - это что за тип?
да не в этом проблема - он потом в стринг переделывается

я думаю что проблема в том что я потом из приложения на шарпе вызываю эту библиотеку и ему не нравится типы в функции SendString (s:PAnsiChar..)
а в шарпе я вызываю как SendString(string s...)
когда приложение запускается,то ошибок нет,просто не выводится текст...так что что-то с типами не то тут..
valdi вне форума Ответить с цитированием
Старый 15.08.2014, 13:24   #7
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Попробуй вместо AnsiString, PChar и т.д., использовать WideString, т.к. насколько я знаю, он лучше подходит к С-подобным программам.
Xo66um вне форума Ответить с цитированием
Старый 15.08.2014, 13:48   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Xo66um Посмотреть сообщение
Попробуй вместо AnsiString, PChar и т.д., использовать WideString, т.к. насколько я знаю, он лучше подходит к С-подобным программам.
WideString вообще структура, что за гадание на картах блин?

Код:
function CP5200_RS232_InitEx(fName:PAnsiChar; nBaund:Integer; nTimeout:Integer):Integer; stdcall; forward; external 'CP5200.dll';
function CP5200_RS232_SendText(nCardID:Integer;nWndNo:Integer;pText:PAnsiChar;crColor: DWord;nFontSize:Integer;nSpeed:Integer;nEffect:Integer;nStayTime:Integer;nAlignment:Integer):Integer; stdcall; forward; external 'CP5200.dll';
  {$R *.res}
function SendString(s:string;port:integer;fontsize:integer): Integer; stdcall;
begin                                        
  CP5200_RS232_InitEx(PAnsiChar(ANSIString('COM'+IntToStr(port)), 115200, 600);
  Result := CP5200_RS232_SendText(1, 0, PAnsiChar(ANSIString(s)), RGB(0,255,0), fontsize, 3, 0, 3, 5)
end;

exports
    SendString;
begin
поидее как-то так.
но это для юникодных Дельфей.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.08.2014, 14:05   #9
valdi
Новичок
Джуниор
 
Регистрация: 15.08.2014
Сообщений: 5
По умолчанию

спасибо за ответ,но все равно не работает
valdi вне форума Ответить с цитированием
Старый 15.08.2014, 15:45   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Для вытаскивания функций из DLL не важен язык программирования. Все языки программирования связаны одним- Ассемблером. Это означает, что если ты компилировал библеотеку на C#, то ты можешь её использовать не только в C#, но и в Delphi, С++, VB.
Надеюсь, как применить процедуры и функции из dll мы знаем.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку Игорь_Алхимик Общие вопросы C/C++ 1 18.03.2014 20:52
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Помогите найти ошибку Slavakin Общие вопросы C/C++ 0 06.11.2013 19:29
Помогите исправить ошибку run.dll Ninel Операционные системы общие вопросы 10 10.12.2009 09:26
Помогите найти ошибку в простом варианте DLL. vl1639 Общие вопросы Delphi 1 24.10.2009 18:20